本小节讲如何使用dom4j解析一个xml文件
以读取books.xml位例
<?xml version="1.0" encoding="UTF-8"?>
<books>
<!-- this is a test for dom4j. -->
<book title="My Book">
<author sex="male">
<first-name>Zhuo</first-name>
<last-name>YING</last-name>
</author>
</book>
<book title="Hibernate Document">
<author sex="male">
<first-name>G</first-name>
<last-name>KING</last-name>
</author>
</book>
</books>
1.读取并解析XML文档(异常处理省略)
SAXReader reader = new SAXReader();
Document document = reader.read(url);
2.得到根节点(异常处理省略)
Document document = doc.getRootElement();
3.遍历DOM节点
dom4j提供了三种方式来遍历节点
1)已java.util.Iterator<org.dom4j.Element>为工具迭代
// 枚举所有子节点
for(Iterator i = root.elementIterator(); i.hasNext();) {
Element element = (Element) i.next();
// do something
}
// 枚举所有"foo"子节点
for (Iterator i = root.elementIterator("foo"); i.hasNext();) {
Element foo = (Element) i.next();
// do something
}
// 枚举所有属性
for (Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
解析上文提到的books.xml文件完整的代码
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestLoadXml {
public void load() {
SAXReader saxReader=new SAXReader();
Document doc = null;
try {
doc = saxReader.read(Thread.currentThread().getContextClassLoader().getResource("books.xml"));
} catch (DocumentException e) {
e.printStackTrace();
}
if (doc != null) {
Element root = doc.getRootElement();
Iterator<Element> iter = root.elementIterator("book");
while (iter.hasNext()) {
Element e = iter.next();
String title = e.attributeValue("title");
String first = e.element("author").element("first-name").getText();
String last = e.element("author").element("last-name").getText();
String sex = e.element("author").attributeValue("sex");
System.out.println(title + ":" + first + "." + last + "[" + sex + "]");
}
}
}
public static void main(String[] argv) {
new TestLoadXml().load();
}
}
2)递归方式
☆笔者不用这种方式
3)Visitor模式
最令人兴奋的是DOM4J对Visitor的支持,这样可以大大缩减代码量,并且清楚易懂。
了解设计模式的人都知道,Visitor是GOF设计模式之一。其主要原理就是两种类互相保有对方的引用,并且一种作为Visitor去访问许多Visitable。
public class MyVisitor extends VisitorSupport {
public void visit(Element element) {
System.out.println(element.getName());
}
public void visit(Attribute attr) {
System.out.println(attr.getName());
}
}
// 调用: root.accept(new MyVisitor())
上面的VisitorSupport是一个dom4j提供的Visitor接口的适配器,以便简化代码。
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;
import org.dom4j.io.SAXReader;
public class TestLoadXML2 {
public void load() {
URL url = Thread.currentThread().getContextClassLoader().getResource(
"books.xml");
SAXReader reader = new SAXReader();
Document doc = null;
try {
doc = reader.read(url);
} catch (DocumentException e) {
e.printStackTrace();
}
if (doc != null) {
doc.accept(new VisitorSupport() {
@Override
public void visit(Element node) {
if (node.getName().equals("book")) {
String title = node.attributeValue("title");
String first = node.element("author").elementText(
"first-name");
String last = node.element("author").elementText(
"last-name");
String sex = node.element("author").attributeValue(
"sex");
System.out.println(title + ":" + first + "." + last
+ "[" + sex + "]");
}
}
});
}
}
public static void main(String[] args) {
new TestLoadXML2().load();
}
}
4)xpath方式,这种并不是一种遍历dom树的方式,但是使用起来很方便
public void bar(Document document) {
List list = document.selectNodes("//foo/bar");
Node node = document.selectSingleNode("//foo/bar/author");
String name = node.valueOf("@name");
}
参考
http://www.iteye.com/wiki/topic/230160
分享到:
相关推荐
jar包,亲测可用
jar包,亲测可用
标题中的"poi-3.8-dom4j1.6.1-xmlbeans-2.3.0架包"指的是一个包含Apache POI 3.8版本、DOM4J 1.6.1版本以及XMLBeans 2.3.0版本的软件包。这个包主要针对Java开发者,用于处理微软Office文档,特别是Excel、Word和...
2. **apache-mime4j-0.6**: Apache MIME4J是一个用于解析和生成MIME格式数据的Java库。MIME(Multipurpose Internet Mail Extensions)是一种标准,广泛用于电子邮件系统,但也用于其他如HTTP协议的数据传输。...
jar包,亲测可用
jar包,亲测可用
java运行依赖jar包
jar包,亲测可用
- DOM4J是一个开源项目,完全遵循Apache Software License 2.0协议。 - 它提供了丰富的API,使得开发者能够方便地读写XML文档,创建、修改和查询XML结构。 - DOM4J支持SAX和DOM解析,同时引入了基于事件的处理...
接着,dom4j-1.6.1.jar是dom4j的库文件,它提供了灵活且高性能的XML处理功能,包括读取、写入、遍历和修改XML文档。通过结合POI,开发者可以先用POI将Excel数据转换为XML,然后使用dom4j进行进一步的数据处理或转换...
2. **wss4j-ws-security-dom.jar**:DOM(Document Object Model)版本的WS-Security实现,用于处理基于DOM的XML消息。 3. **wss4j-ws-security-stax.jar**:STAX(Streaming API for XML)版本的实现,适用于处理...
2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...
本文将深入探讨Xerces-J,一个强大的Java实现的XML解析器,以及在"beta-dom3-Xerces-J-bin.2.6.0.zip"压缩包中的相关内容。 Xerces-J是Apache软件基金会的一个项目,它提供了完整的XML解析器,包括DOM(Document ...
在提供的"TestDom4jLog4j"项目中,应该包含了使用DOM4j处理XML和log4j记录日志的示例代码,通过阅读和运行这些代码,可以更好地理解DOM4j和log4j的使用方法。对于初学者来说,这是一个很好的实践和学习资源。
在实际应用中,解析SOAP消息通常结合网络请求,例如使用Apache HttpClient发送SOAP请求并接收响应,然后使用DOM4J解析响应内容。了解DOM4J库的其他功能,如XPath查询、命名空间处理等,可以帮助更高效地处理复杂SOAP...
DOM4J-1.6.1.jar是DOM4J的一个版本,其中包含了完整的DOM4J库。使用DOM4J,开发者可以方便地读取、写入、修改XML文档,甚至进行复杂的查询操作。 2. JDOM解析库: JDOM是一个专为Java设计的XML API,它提供了一种...
DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML内容。在Java开发中,DOM4J常被用于读取、写入、更新和删除XML文档,极大地简化了与XML相关...
`dom4j-full.jar`包含了所有`dom4j`相关的类和功能。这个库提供了一种简单而灵活的方式来读取、写入、修改和查询XML文档。相比于Java自带的DOM和SAX解析器,`dom4j`更加易于使用,性能也更优。它支持XPath查询,能够...
2. **dom4j-2.0.0-ALPHA-2-sources.java**:这是一个源代码文件,包含了DOM4J库的源代码。开发者可以通过阅读源代码来理解DOM4J的工作原理,或者在遇到问题时进行调试。对于深入学习和定制DOM4J功能的开发者来说,源...
5. `dom4j-1.6.1.jar`:正如前面提到的,DOM4J是一个强大的XML处理库,可以帮助读写、操作和导航XML文档,它也可以与Apache POI协同工作,特别是在处理XML格式的Excel数据时。 结合这些库,开发者可以创建Java程序...