dom4j通过 xpath 处理xmlns

xml中含有命名空间后,用普通的xpath只能筛选到根结点

需要在map里加一个xml的namespace

Map map = new HashMap();
map.put("xmlns","http://docbook.org/ns/docbook");

reader.getDocumentFactory().setXPathNamespaceURIs(map);

FileInputStream fin = new FileInputStream(new File(absolutePath));
InputStreamReader is = new InputStreamReader(fin,"UTF-8");
Document document = reader.read(is);

然后再装载XML文件

编写xpath时要带要上xmlns

原来是这样写:document.selectNodes("/book/formerAidText/title")

加上xmlns后:document.selectNodes("/xmlns:book/xmlns:formerAidText/xmlns:title")

如果闲麻烦,加个正则替换

public static String fixedXpath(String xpath)
{
     xpath= xpath.replaceAll("/(\\w)", "/"+"xmlns:$1");//replace start with "/"
     xpath= xpath.replaceAll("^(\\w)", "xmlns:$1");    //replace start with word
     return xpath;
}
时间: 2024-10-03 07:03:54

dom4j通过 xpath 处理xmlns的相关文章

Dom4J配合XPath解析schema约束的xml配置文件问题

如果一个xml文件没有引入约束,或者引入的是DTD约束时,那么使用dom4j和xpath是可以正常解析的,不引入约束的情况本文不再展示. 引入DTD约束的情况 mybook.dtd: <?xml version="1.0" encoding="UTF-8" ?> <!ELEMENT books (book+)> <!ELEMENT book (name|author|price)+> <!ELEMENT name (#PCD

jdom xpath定位带xmlns命名空间的节点(转)

jdom xpath定位带xmlns命名空间的节点 2013-06-29      0个评论       作者:baozhengw 收藏    我要投稿 关键词:jdom xpath xmlns 命名空间 openjweb 在jdom中用 xpath定位节点通常采用以下方式: XPath xpath=null;Element anode = null;SAXBuilder sb = new SAXBuilder();Document doc = null;try{    doc = sb.bui

Java---XML的解析(2)-DOM4J解析/Xpath

Dom4j: Dom SUN dom在加载时,将所有元素全部加载内存 DOM4j - 第三方. Dom4j是一个开源.灵活的XML API. 目前很多开源框架如struts,hibernate都使用dom4j做为解析其xml的工具. 支持文档的读写功能和Xpath快速查询操作. 这个需要我们自己把它的包导入myeclipse中的. 准备DOM4j: 包:dom4j.x.jar 包结构: org.dom4j 类 org.dom4j.io.SAXReader – xml文档解析器 org.dom4j

Dom4j和Xpath(转)

1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和JAXP. DOM4J使用起来非常简单.只要你了解基本的 XML-DOM 模型,就能使用. Dom:把整个文档作为一个对象. DOM4J 最大的特色是使用大量的接口.它的主要接口都在org.dom4j里面定义: 魂牵梦萦 魂牵梦萦 魂牵梦萦 Attribute 定义了 XML 的属性. Branch 指能够包含子节点的节点

爪哇国新游记之三十四----Dom4j的XPath操作

Dom4j是Java访问XML的利器之一,另一个是JDom.记得当年因为粗掌握点JDomAPI但项目要求使用Dom4j还闹一阵情绪,现在看来真是没必要,只花一些时间成本就进去一个新世界绝对是值得做的一件事.更何况JDom因无人更新而停顿了. Dom4j有两个包,一个是dom4j-1.6.1.jar,它提供基本的XML API支持,如访问节点,属性等. 还有一个是jaxen-1.1-beta-9.jar,它提供XPath支持. 言归正传,下面请看例程. 1.访问特定节点群 XML样本: <appl

学习:Dom4j和Xpath

1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和JAXP. DOM4J使用起来非常简单.只要你了解基本的 XML-DOM 模型,就能使用. Dom:把整个文档作为一个对象. DOM4J 最大的特色是使用大量的接口.它的主要接口都在org.dom4j里面定义: Attribute 定义了 XML 的属性. Branch 指能够包含子节点的节点.如XML元素(Element

XML系列:(8)XML解析-Dom4j的xPath技术

1.xPath技术 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xPath作用:主要是用于快速获取所需的节点对象. 1.1.在dom4j中如何使用xPath技术 1)导入xPath支持jar包 .  jaxen-1.1-beta-6.jar(这个jar包在dom4j的压缩包中,位置:dom4j-1.6.1\lib\jaxen-1.1-beta-6.jar) 2)使用xpath方法 List selectNodes("xpath表达式");  

dom4j支持Xpath的具体操作

***默认情况下,dom4j不支持xpath. 如果想要使用xpath,需要引入jaxen-1.1-beta-6.jar包. 在dom4j中提供了两个方法来支持xpath. ***selectNodes("xpath表达式") ---获取多个节点 ***selectSingleNode("xpath表达式") ---获取一个节点 **使用xpath实现:查询所有name元素的值 所有name元素的值用://name animal.xml <?xml versi

dom4j使用xpath报异常 Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230 ) at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207) at org.dom4j.tree.Abstrac