package com.njusc.xmlTest;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class TestDom4jReadExmple
{
/*
* 创建一个测试xml bicashy.xml
*
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student age="25">
<name>云天河</name>
<college>野外学院</college>
<telephone>62354666</telephone>
<notes>一个从小在山野里长大的少年,双亲早亡,小小年纪就开始了自立的生活。</notes>
</student>
<student>
<name>韩菱纱</name>
<college leader="侠盗高飞">盗墓学院</college>
<telephone>62358888</telephone>
<notes>女,出身于盗墓世家,却对辨识墓穴位置、破解诡异机关、地脉风水之学颇有研究。</notes>
</student>
<student age="18">
<name>柳梦璃</name>
<college leader="">名门贵族</college>
<telephone>66666666</telephone>
<notes>梦璃是一个满怀柔情的女孩子,但她最温柔的一面只会留给自己喜欢的人。</notes>
</student>
<student age="18">
<name>慕容紫英</name>
<college>昆仑学院</college>
<telephone>88888888</telephone>
<notes>外冷内热、嫉恶如仇的热血青年,不但剑术超群,铸剑之术更是厉害。</notes>
</student>
</students>
*/
public static void main(String[] args) {
try{
//获取解析完后的解析信息
//利用XPath操作XML文件,获取想要的属性值
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("d:/bicashy.xml"));
/*直接定位到student name为云天河的节点的age属性*/
List list = document.selectNodes("/students/student[name=\"云天河\"]/@age");
Iterator iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
System.out.println("云天河-"+attribute.getName()+":"+attribute.getValue());
}
/*获取学生姓名为"韩菱纱"所在的学院名称*/
list = document.selectNodes("/students/student[name=\"韩菱纱\"]/college");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
String name = element.getName();
String value = element.getText();
System.out.println("韩菱纱-"+name+":"+value);
}
/*获取学生姓名为"韩菱纱"所在学院的师傅*/
list = document.selectNodes("/students/student[name=\"韩菱纱\"]/college/@leader");
iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
System.out.println("韩菱纱-college-"+attribute.getName()+":"+attribute.getValue());
}
/*获取学生姓名为"柳梦璃"的简介*/
list = document.selectNodes("/students/student[name=\"柳梦璃\"]/notes");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
System.out.println("柳梦-"+element.getName()+":"+element.getText());
}
/*获取年龄为"18"的学生的姓名、学院和电话号码*/
list = document.selectNodes("/students/student[@age='18']");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
/*获取年龄为"18",college的leader为空的学院名称*/
list = document.selectNodes("/students/student[@age='18']/college[@leader='']");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
System.out.println(""+element.getName()+":"+element.getText());
}
/*获取年龄为"18"姓名为"柳梦璃"、姓名、学院和电话号码*/
list = document.selectNodes("/students/student[@age='18'][name='柳梦璃']");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
/*获取年龄大于18的人的 姓名、学院和电话号码*/
list = document.selectNodes("/students/student[@age>18]");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
/*获取student所有的人的 姓名、学院和电话号码 */
//注 /students/student 可简写为//student根节点可以省去
list = document.selectNodes("//student");
for(Object o:list){
Node n = (Node ) o;
Element name = (Element)n.selectObject("name");
Element college = (Element)n.selectObject("college");
Element telephone = (Element)n.selectObject("telephone");
System.out.println(name.getText()+"__ "+"college:"+college.getText()
+" telephone:"+telephone.getText());
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
分享到:
相关推荐
本篇文章将深入探讨如何使用Dom4j,一个流行的Java库,结合XPath来解析XML文件中的路径表达式,同时阐述相对路径和绝对路径的匹配原则。 首先,我们要了解Dom4j库。Dom4j是一个灵活且高效的处理XML的Java库,它提供...
DOM4J可以加载和解析XML文档,然后利用XPath表达式进行数据检索。这种方式避免了传统遍历DOM树的低效,尤其是在大型XML文档中,XPath的查询性能优势尤为明显。 在Java项目中,通常会将DOM4J和XPath的jar包打包在...
为了使用这个库,你需要将该jar包添加到项目的类路径中,然后就可以通过DOM4J提供的类和方法来解析和操作XML文件了。 总之,DOM4J是一个功能强大的XML处理库,无论是在小型项目还是大型系统中,都能发挥其优势,...
在压缩包文件"复件 dom"中,可能包含了示例代码或教程,用于演示如何使用DOM4J和本地DOM解析XML文件。通过查看这些文件,你可以更深入地了解两种方法的具体实现,并在实际项目中选择合适的方式处理XML数据。 总结来...
NULL 博文链接:https://bbsanwei.iteye.com/blog/266394
本篇文章将详细介绍如何使用DOM(Document Object Model)和DOM4j这两种流行的方法来解析XML文件。 首先,DOM是一种标准的W3C推荐的解析XML的方法,它将整个XML文档加载到内存中,形成一个树形结构,便于程序进行...
相比于标准的DOM(Document Object Model)API,DOM4J更加轻量级,性能更优,同时提供了更多的高级特性,如XPath支持、SAX和DOM的集成、事件驱动的解析等。DOM4J通过树形结构表示XML文档,使得开发者可以方便地访问...
首先,使用DOM4J的解析器读取XML文件,创建Document对象;然后,利用XPath的API,如`org.dom4j.XPath`,编译并执行XPath表达式,获取到所需节点列表;最后,对这些节点进行进一步的操作,如遍历、修改或删除。 举个...
- **dom4j+jaxen操作XML**:首先使用dom4j解析XML,然后通过jaxen创建XPath对象并执行查询。查询结果可以是元素、属性或其他XML节点,根据需要进行进一步处理。 例如,以下代码展示了如何使用dom4j和jaxen解析XML...
2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...
DOM4J库集成了XPath支持,使得在DOM4J中使用XPath查询XML数据变得非常方便。 DOM4J的主要特性包括: 1. **XML解析**:DOM4J提供了多种解析方式,包括DOM、SAX和StAX,以适应不同的性能和内存需求。 2. **文档模型**...
本教程将重点讨论如何使用Java库Demo4j与XPath一起工作,以解析XML文件中的路径表达式。 首先,我们需要理解XPath的基本概念。XPath使用路径表达式来选取XML文档中的节点,这些路径表达式类似于文件系统中的路径。...
在处理大文件时,DOM4J结合XPath的使用,可以有效地管理和分析大量数据。在这个场景下,描述提到的测试涉及到了50多万条数据的解析,这无疑是对DOM4J性能的一次挑战。 首先,我们来深入理解DOM4J的核心概念。DOM4J...
- **配置文件解析**: 许多应用使用XML作为配置文件的格式,DOM4J可以方便地读取和更新这些配置信息。 - **Web服务**: 在SOAP等协议中,XML是常用的数据传输格式,DOM4J能够帮助构建和解析这些XML消息。 - **文档生成...
在Java编程中,解析XML文档通常需要借助库,如DOM4J和XPath。DOM4J是一个灵活且功能强大的开源Java XML API,它提供了XML的读取、写入、修改和遍历等功能。XPath则是W3C标准中的一个查询语言,用于在XML文档中查找...
常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...
本篇学习笔记将深入探讨如何使用Dom4j解析XML文档,并结合XPath进行查询。 **一、Dom4j解析XML** 1. **添加依赖**:首先,你需要在项目中引入Dom4j库。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml...