zoukankan      html  css  js  c++  java
  • dom4j 通过 org.dom4j.DocumentFactory 设置命名空间来支持 带namespace 的 xpath

    测试文件 test.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>cn.zno</groupId>
        <artifactId>z-test</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>xmlunit</groupId>
                <artifactId>xmlunit</artifactId>
                <version>1.6</version>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    </project>
    test.xml

    所需依赖

    	<dependencies>
    		<dependency>
    			<groupId>dom4j</groupId>
    			<artifactId>dom4j</artifactId>
    			<version>1.6.1</version>
    		</dependency>
    		<dependency>
    			<groupId>jaxen</groupId>
    			<artifactId>jaxen</artifactId>
    			<version>1.1.6</version>
    		</dependency>
    	</dependencies>

    测试类

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.xml.transform.TransformerFactoryConfigurationError;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentFactory;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;
    
    public class Dom4jDemo {
    
        public static void main(String[] args) throws TransformerFactoryConfigurationError, Exception {
            InputStream is = Dom4jDemo.class.getResourceAsStream("/test.xml");
    
            SAXReader saxReader = new SAXReader();
            DocumentFactory documentFactory = saxReader.getDocumentFactory();
            Map<String, String> namespaceURIs = new HashMap<String, String>();
            namespaceURIs.put("a", "http://maven.apache.org/POM/4.0.0");
            namespaceURIs.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            documentFactory.setXPathNamespaceURIs(namespaceURIs);
            Document doc = saxReader.read(is);
    
            Node versionNode = doc.selectSingleNode("//a:project/a:dependencies/a:dependency[a:groupId/text()='junit' and a:artifactId/text()='junit']/a:version");
            System.out.println(versionNode.getText());
    
        }
    }

    测试结果

    4.12

    注意:

    1) 依赖 jaxen 而非 xalan (这个是转换时用的)

    2)a:project 即是 qualified name ,全称:

    http://maven.apache.org/POM/4.0.0/:project

    3) xpath 语法:

    https://www.w3.org/TR/xpath/

    4) 简单举例

            String bean = doc.selectSingleNode("//generatorConfiguration/context/table[contains(@tableName,'"+name+"')]/@domainObjectName").getText();
            String javaModel = doc.selectSingleNode("//generatorConfiguration/context/javaModelGenerator/@targetPackage").getText();
            String sqlMap = doc.selectSingleNode("//generatorConfiguration/context/sqlMapGenerator/@targetPackage").getText();
            String javaClient = doc.selectSingleNode("//generatorConfiguration/context/javaClientGenerator/@targetPackage").getText();
            System.out.println(javaModel + "." + bean + ".java");
            System.out.println(sqlMap + "." + bean + "Mapper.xml");
            System.out.println(javaClient + "." + bean + "Mapper.java");
  • 相关阅读:
    Android碰撞检测——Region碰撞检查
    游戏音乐MediaPlayer和SoundPool常用的一些方法
    游戏框架SurfaceView的简单运用
    Android碰撞检测——矩形检查
    View框架下实现角色的上下左右移动
    数据库导出到Excel前后端代码
    jQuery打印插件PrintArea实现
    showModalDialog 传值及刷新
    文件夹中文件夹(文件)按时间排序,读取最新的文件夹(文件)
    .NET分布式开发报错:“与基础事务管理器的通信失败”的解决方法
  • 原文地址:https://www.cnblogs.com/zno2/p/7469086.html
Copyright © 2011-2022 走看看