使用 DOM4J 的xpath 非常方便,但是,直接使用xpath 取带命名空间的xm文件,会出现取不到节点的问题.具体问题如下
<message id="oNVls-26"
to="admin6@172.17.35.3"
from="admin3@172.17.35.3/Smack"
type="chat">
<subject>zscasvgsadg</subject>
<body>sdvgsdvsaddzsfbnzsdfbvdas</body>
<thread>0pMmg6</thread>
<ext xmlns="infoair:obcs:msg:ext">
<identify>1306663476453admin38</identify>
<sendType>NOR</sendType>
<awokeTime>60</awokeTime>
<x xmlns="infoair:obcs:msg:source" var="130666347645334345"/></ext>
</message>
如果想取
identify 的值: 使用xpath expression : “/message/ext/identify
” 将不能取到值
取x的属性值 : 使用xpath expression: “/message/ext/identify/x/@var
“; 也不能取到x var 的属性值
那么该怎么做了,直接上代码:
public static MessageNode getNode1(String msg)
throws DocumentException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new StringReader(msg));
XPath xPath = document.createXPath("/message/a:ext/a:identify");
Map<String, String> names = new HashMap<String, String>();
names.put("a", "infoair:obcs:msg:ext");
MessageNode messageNode = new MessageNode();
xPath.setNamespaceURIs(names);
Node node = xPath.selectSingleNode(document);
messageNode.setIdentify(node.getText());
xPath = document.createXPath("/message/a:ext/b:x/@var");
names.put("b", "infoair:obcs:msg:source");
xPath.setNamespaceURIs(names);
node = xPath.selectSingleNode(document);
messageNode.setParentId(node.getText());
return messageNode;
}
names.put("a", "infoair:obcs:msg:ext");
只要 xpath 选择时,加上命名空间就行了
"a
" 表示前缀,"infoair:obcs:msg:ext
" 表示命名空间。
具体原因,请见:
XML 命名空间以及它们如何影响 XPath 和 XSLT (Extreme XML)
分享到:
相关推荐
在处理带有命名空间的XML文件时,DOM4J库显得尤为重要,因为XML命名空间是XML规范中一个关键的概念,用于避免元素名称的冲突。 XML命名空间的引入是为了在一个文档中使用来自不同来源的元素和属性。它们通过URI...
本篇文章将深入探讨如何使用Dom4j,一个流行的Java库,结合XPath来解析XML文件中的路径表达式,同时阐述相对路径和绝对路径的匹配原则。 首先,我们要了解Dom4j库。Dom4j是一个灵活且高效的处理XML的Java库,它提供...
在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是一个名为`dom4j-x.x.x.jar`的文件,其中x.x.x是DOM4J的版本号...
- DOM4J还支持XPath表达式,可以通过`XPathFactory`和`XPath`对象来选择XML节点。 在实际应用中,DOM4J通常优于本地DOM解析,因为它提供了更多的便利功能,如元素遍历、修改、查询等。同时,DOM4J对内存和CPU的...
5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...
此外,DOM4J还支持命名空间、XPath表达式以及转换为其他XML格式(如SAX或DOM)的能力。 XPath是W3C制定的一种查询语言,用于在XML文档中查找信息。它可以定位到XML文档中的特定节点,如元素、属性、文本等。XPath...
Demo4j不直接包含XPath功能,但可以与其他库(如JDOM或DOM4J)结合使用,以实现XPath查询。DOM4J是Java中一个流行的XML处理库,它提供了XPath的支持。 在集成DOM4j和XPath时,首先需要创建一个Document对象,这代表...
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
12. **Node**: 为DOM4J中的所有XML节点提供一个多态接口,包括`Element`、`Attribute`、`Comment`等,简化了节点类型的处理。 13. **NodeFilter**: 定义了节点过滤器的行为,可以在遍历节点时应用条件筛选。 14. **...
这篇博文将深入探讨如何在DOM4J中使用XPath进行数据查找和操作。 首先,我们需要理解DOM4J中XPath的基本概念。XPath表达式是由路径、轴、节点测试和节点组合组成的字符串,用于定位XML文档中的特定节点。例如,`/...
- **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...
DOM4J库集成了XPath支持,使得在DOM4J中使用XPath查询XML数据变得非常方便。 DOM4J的主要特性包括: 1. **XML解析**:DOM4J提供了多种解析方式,包括DOM、SAX和StAX,以适应不同的性能和内存需求。 2. **文档模型**...
本篇文章将详细介绍如何使用DOM(Document Object Model)和DOM4j这两种流行的方法来解析XML文件。 首先,DOM是一种标准的W3C推荐的解析XML的方法,它将整个XML文档加载到内存中,形成一个树形结构,便于程序进行...
总结来说,处理带有命名空间的XML文档,特别是在使用XPath时,需要理解XML命名空间的概念,掌握DOM4J的命名空间注册方法,并能够正确构造XPath表达式。这样,即使面对复杂的XML结构,也能游刃有余地进行数据提取和...
在Java编程中,解析XML文档通常需要借助库,如DOM4J和XPath。DOM4J是一个灵活且功能强大的开源Java XML API,它提供了XML的读取、写入、修改和遍历等功能。XPath则是W3C标准中的一个查询语言,用于在XML文档中查找...
2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...
XPath使用路径表达式来选取节点,这些表达式类似于文件系统的路径,可以定位到XML文档中的特定节点,如元素、属性、文本等。XPath提供了一系列函数和轴,如`//`, `.//`, `/`, `@`等,帮助开发者更加方便地选取数据。...
在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...