dom4j 通过 org.dom4j.DocumentFactory 设置命名空间来支持 带namespace 的 xpath
2017-09-03 11:06
435 查看
测试文件 test.xml
test.xml
所需依赖
测试类
测试结果
注意:
1) 依赖 jaxen 而非 xalan (这个是转换时用的)
2)a:project 即是 qualified name ,全称:
3) xpath 语法:
https://www.w3.org/TR/xpath/
<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/
相关文章推荐
- dom4j 通过 org.dom4j.XPath 设置命名空间来支持 带namespace 的 xpath
- dom4j中通过xpath处理带命名空间的XML文件
- dom4j中通过xpath处理带命名空间的XML文件
- C#解析XML详解(XPath以及带命名空间NameSpace)
- DOM4J XPath读取具有命名空间的XML文档元素
- C#解析XML详解(XPath以及带命名空间NameSpace)
- dom4j结合xpath获取多命名空间xml中指定id、指定属性节点
- 转: dom4j中使用xpath解析带命名空间的xml文件,取不到节点的解决办法
- dom4j处理带命名空间的XML-使用XPath
- PHPStorm 添加支持 PSR-4 命名空间前缀设置
- dom4j 使用原生xpath 处理带命名空间的文档
- C#解析XML详解(XPath以及带命名空间NameSpace)
- Flex中如何通过创建新的XML命名空间(namespace),在MXML中使用flash.filters类
- Xpath dom4j解析带有命名空间的XML的方法
- JavaScript 实现命名空间(namespace)的最佳方案——兼容主流的定义类(class)的方法,兼容所有浏览器,支持用JSDuck生成文档
- JDOM2.0.5版本通过xpath读取xml或读取带有命名空间的xml
- java 在dom4j中,使用XPath处理XML(主要对命名空间的处理)
- dom4j中使用xpath解析带命名空间的xml文件,取不到节点的解决办法
- dom4j中使用xpath解析带命名空间的xml文件,取不到节点的解决办法
- namespace命名空间