困扰我几周的dom4j无法解析xml命名空间的问题近日得以解决,如果这个问题也正在困扰你,看看下文也许能给你一些启发
xml文件----myXML.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyXML xmlns="http://www.ttt.com/ttt-TrdInfo-1-0" xmlns:x="http://www.ttt.com/ttt/metadata.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="res286.xsd">
<Hdr>
<ReqId>001</ReqId>
<Tid>1002</Tid>
<Cid>500</Cid>
<user>cuishen</user>
<Mname>supermarket</Mname>
<pwd>543200210</pwd>
</Hdr>
<Car>
<Flg>T</Flg>
<Cod>ccc</Cod>
<Door>kkk</Door>
<mktId>b01</mktId>
<Key>
<KeyID>t01</KeyID>
</Key>
</Car>
</MyXML>
下面是用dom4j解析上面xml文件的java源文件
---ReadMyXML.java
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.Attribute;
import org.dom4j.io.SAXReader;
import org.dom4j.DocumentException;
public class ReadMyXML{
public static void main(String args[]){
File xmlFile = new File("c:/myXML.xml");
SAXReader xmlReader = new SAXReader();
try{
Document document = xmlReader.read(xmlFile);
///*测试代码 适用于读取xml的节点
HashMap xmlMap = new HashMap();
xmlMap.put("mo","http://www.ttt.com/ttt-TrdInfo-1-0");
XPath x = document.createXPath("//mo:ReqId");
x.setNamespaceURIs(xmlMap);
Element valueElement = (Element)x.selectSingleNode(document);
System.out.println(valueElement.getText());
//*/
}catch(DocumentException e){
e.printStackTrace();
}
}
}
上面就是运用dom4j解析带命名空间的xml文件的节点的例子,只要给XPath设置默认的命名空间就行了,这个xml文件尽管定义了其他命名空间,但是没有用到它,所以不必管它,那个HashMap里的键是随便定义的字符串,值就是默认的命名空间对应的字符串。document.createXPath()里传的参数是要读取的节点的XPath,即“//”+ HashMap里的键名 + “:”+ 要读取的节点名组成的字符串,简单吧,后面怎么做我就不用说了吧^_^
如果要读取的是xml文件里的属性该怎么办呢,不用急,看看下面的例子你就明白了,原理一样,只要在造XPath字符串的时候在属性前加个“@”就行了。
xml文件----myXML2.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyXML xmlns="http://www.ttt.com/ttt-TrdInfo-1-0" xmlns:x="http://www.ttt.com/ttt/metadata.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="res286.xsd">
<Hdr ReqId="001" Tid="1002" Cid="500" user="cuishen" Mname="supermarket" pwd="543200210"/>
<Car Flg="T" Cod="ccc" Door="kkk" mktId="b01">
<Key KeyID="t01"/>
</Car>
</MyXML>
解析上面xml文件的java文件如下
---ReadMyXML2.java
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.Attribute;
import org.dom4j.io.SAXReader;
import org.dom4j.DocumentException;
public class ReadMyXML2{
public static void main(String args[]){
File xmlFile = new File("c:/myXML2.xml");
SAXReader xmlReader = new SAXReader();
try{
Document document = xmlReader.read(xmlFile);
///*测试代码 解析xml的属性
HashMap xmlMap = new HashMap();
xmlMap.put("mo","http://www.ttt.com/ttt-TrdInfo-1-0");
XPath x = document.createXPath("//mo:Hdr/@ReqId");
x.setNamespaceURIs(xmlMap);
Attribute valueAttribute = (Attribute)x.selectSingleNode(document);
System.out.println(valueAttribute.getText());
//*/
}catch(DocumentException e){
e.printStackTrace();
}
}
}
分享到:
相关推荐
在处理带有命名空间的XML文件时,DOM4J库显得尤为重要,因为XML命名空间是XML规范中一个关键的概念,用于避免元素名称的冲突。 XML命名空间的引入是为了在一个文档中使用来自不同来源的元素和属性。它们通过URI...
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
6. **Namespace支持**:DOM4J提供了对XML命名空间的全面支持,可以方便地处理包含命名空间的XML文档。 7. **DocumentType支持**:对于包含DOCTYPE声明的XML文档,DOM4J可以处理这些声明,并提供对应的DocumentType...
DOM4J提供了对命名空间的完整支持,方便处理这类问题。 5. **文档转换**:DOM4J可以将XML文档转换为其他格式,如Java对象、HTML、DOM或SAX事件。 6. **集成其他技术**:DOM4J与许多其他Java库如JAXB(Java API for...
4. **Namespace(命名空间)**:用于解决XML文档中相同标签名的冲突问题。 5. **XPath(路径表达式)**:DOM4J支持XPath,这是一种强大的查询语言,可以用来定位XML文档中的特定节点。 6. **...
1. **DOM4J API**:DOM4J提供了一组直观的类和接口来操作XML文档,如`Element`代表XML元素,`Attribute`代表属性,`Document`表示整个XML文档,还有`Namespace`处理命名空间。通过这些API,开发者可以轻松地创建、...
**DOM4J解析XML** DOM4J是一个Java库,它为处理XML提供了强大的功能,包括读取、写入、修改和操作XML文档。这个库以其灵活性、效率和易用性而受到开发者的青睐。DOM4J是基于DOM(Document Object Model)的,但它...
**DOM4J解析XML实例详解** 在Java编程中,处理XML文档是一项常见的任务。DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML...
在提供的“analysis_xml”项目中,很可能包含了一个示例,演示了如何使用dom4j的SAX解析器解析XML文件。这样的测试项目有助于理解SAX解析的工作原理,并在实际开发中应用。 总结起来,dom4j库提供了DOM和SAX两种XML...
在使用DOM4J解析XML文件之前,需要导入DOM4J相关的jar包,通常版本为1.6.1。 #### DOM4J常用对象 - **SAXReader**: 用于读取XML文件,并将其转换成Document对象。 - **Document**: XML文档对象树,类似于HTML文档...
本篇文章将深入探讨在解析XML时,如何处理包含命名空间的情况,特别关注使用DOM4J库的方法。 DOM4J是Java社区中广泛使用的XML处理库,它提供了灵活且强大的API来读取、写入、修改和操作XML文档。在处理带有命名空间...
5. **命名空间(Namespace)**: 在处理包含命名空间的XML时,Dom4j能有效地管理这些命名空间。 **二、Dom4j解析XML** 1. **读取XML文件**: 使用`DocumentBuilderFactory`创建`DocumentBuilder`,然后通过`parse()`...
在本实例中,我们将深入探讨如何使用DOM4J解析XML,并利用这些数据连接Oracle数据库进行数据操作。 首先,让我们了解DOM4J的基本用法。DOM4J的主要类包括`Document`、`Element`、`Attribute`和`Namespace`。`...
3. **DOM4J解析XML**:介绍如何使用DOM4J读取XML文件并创建Document对象,解析XML元素和属性。 4. **DOM4J格式化API**:详述DOM4J库中用于格式化XML的类和方法,如`DocumentHelper.formatDocument()`或`Element....
DOM4J不仅兼容DOM和SAX,还提供了额外的功能,如自动命名空间处理、文档验证等。 DOM4J的一些特点包括: - **轻量级**:DOM4J相比标准的DOM实现更加轻量,消耗更少的内存。 - **易用性**:DOM4J提供了一套直观且...
6. **命名空间支持**:DOM4J也支持XML命名空间,这对于处理包含多个命名空间的XML文档非常有用。 7. **事件驱动处理**:虽然DOM4J主要基于DOM模型,但也可以通过`SAXReader`实现SAX风格的事件驱动解析,这样可以在...
7. **便捷的API**:DOM4J的API设计简洁易用,使得开发人员能够快速上手,同时提供高级特性,如命名空间管理、注释处理和处理指令等。 在实际应用中,例如Web服务、配置文件处理、数据交换等场景,DOM4J都能够发挥...
总结来说,这个压缩包提供了DOM4J解析XML文件所需的关键组件,包括DOM4J本身、XPath处理器Jaxen以及XML解析器Xerces。有了这些工具,开发者可以高效地处理XML文档,实现数据的读取、查询和修改,为Java应用程序带来...
1. **解析XML文档**:DOM4J提供了多种解析器,如SAX和DOM解析器,可以高效地将XML文档转换为树形结构。通过这种方式,开发者可以方便地遍历和访问XML元素。 2. **构建XML文档**:DOM4J允许动态创建XML文档,可以...
了解DOM4J库的其他功能,如XPath查询、命名空间处理等,可以帮助更高效地处理复杂SOAP消息。 总之,DOM4J是处理XML文档的强大工具,包括解析和操作SOAP消息。通过熟悉其API和XML结构,开发者可以轻松地从SOAP消息中...