public class Dom4j
{
public static void main(String[] args) throws Exception
{
List<Student> list = parseXml();
for (Student s : list)
{
System.out
.println(s.getId() + ":" + s.getName() + ":" + s.getAge());
}
} public static List<Student> parseXml() throws Exception
{
// 定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document。
// 此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取。
// 获取此类的实例之后,将可以从各种输入源解析 XML。这些输入源有 InputStreams、Files、URL 和 SAX
// InputSources。
// 注意,此类重用了 SAX API 中的一些类。这并不要求底层 DOM 实现的实现者使用 SAX 解析器将 XML 文档解析为
// Document。
// 它仅要求该实现使用这些现有的 API 与应用程序交流。
DocumentBuilder db = dbf.newDocumentBuilder(); // Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
// 因为元素、文本节点、注释、处理指令等不能存在于 Document 的上下文之外,所以 Document
// 接口还包含所需的创建这些对象的工厂方法。
// 所创建的 Node 对象具有 ownerDocument 属性,该属性将 Node 对象与创建这些对象时的上下文所属的 Document
// 关联起来
Document doc = db.parse("C:/Users/xmc/Desktop/student.xml"); // XPathFactory 实例可用于创建 XPath 对象
XPathFactory xFactory = XPathFactory.newInstance(); // XPath 提供了对 XPath 计算环境和表达式的访问。
// 如果在没有上下文项的情况下请求计算表达式,则将使用一个空文档节点作为上下文。
// 为计算 XPath 表达式,应将 DocumentFragment 视为 Document 节点。
// 如果表达式包含变量引用,则其值将通过 XPathVariableResolver 找到,
// 其中 XPathVariableResolver 是通过
// setXPathVariableResolver(XPathVariableResolver resolver) 设置的。
// 如果变量解析器未定义或解析器对变量返回 null,则引发 XPathExpressionException。
// 在任何单个计算过程中,变量的值必须是不可变的。
XPath path = xFactory.newXPath(); // NodeList 接口提供对节点的有序集合的抽象,没有定义或约束如何实现此集合。DOM 中的 NodeList 对象是活动的。
// NodeList 中的项可以通过从 0 开始的整数索引进行访问。
NodeList nodes = (NodeList) path.evaluate("/students/student", doc,
XPathConstants.NODESET); // 创建一个Student集合用于存放反序列化之后的每个Student节点构成的Student对象
List<Student> list = new ArrayList<Student>(); // 从NodeList集合中挨个取出元素转换成Student对象存入Student集合中
for (int i = 0; i < nodes.getLength(); i++)
{
Node node = nodes.item(i);
list.add(nodeToStudent(node));
}
return list;
} /**
*将XML中的一个Student节点转换成Student对象
*/
public static Student nodeToStudent(Node node)
{
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
Student s = new Student();
Double id = null;
String name = null;
Double age = null;
try
{
id = (Double) xPath.evaluate("id", node, XPathConstants.NUMBER);
name = (String) xPath.evaluate("name", node, XPathConstants.STRING);
age = (Double) xPath.evaluate("age", node, XPathConstants.NUMBER);
} catch (Exception e)
{
e.printStackTrace();
}
s.setId(id.intValue());
s.setName(name);
s.setAge(age.intValue());
return s;
}
}
/**
* @author xmc
* Student实体,与XML中的节点对应
*/
class Student
{
private int id;
private String name;
private int age; public int getId()
{
return id;
} public void setId(int id)
{
this.id = id;
} public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public int getAge()
{
return age;
} public void setAge(int age)
{
this.age = age;
} }

Dom解析XML文件具体用法的更多相关文章

  1. 使用DOM解析xml文件

    使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...

  2. DOM解析XML文件例子

    DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式. 一般分为以下几步: 1. 定义好目标XML文件路径path . 2. 实例化DOM解析工厂对象 ,Document ...

  3. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  4. 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点

    使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...

  5. DOM解析XML文件实例

    XML文件: response: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www ...

  6. dom 解析xml文件

    JAXP技术 JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术.大家可以参见SUN的以下两 ...

  7. Qt中使用DOM解析XML文件或者字符串二(实例)

    介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...

  8. Python—使用xm.dom解析xml文件

    什么是DOM? 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口. 一个 DOM 的解析器在解析一个 XML 文档时,一次性读 ...

  9. DOM解析XML文件

    1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...

随机推荐

  1. SGU326_Perspective

    NBA打比赛.所有的比赛被分为多个团队.有的比赛是团内的,有的是与团外的队伍打的. 给出团内每个队伍已得分,以及总共有多少场比赛,还有团内所有队伍之间有多少场比赛? 问1队是否可能是分数最高的一个队伍 ...

  2. static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

  3. LAMP 环境下添加多个虚拟主机(网站)

    Ubuntu系统 #在/var/www目录下新建两个文件夹bbs和oa,执行完以上命令后,/var/www目录下有bbs.oa三个文件夹,名称与二级域名对应,分别存放三个系统的php文件,这样便于日后 ...

  4. django-rest-swagger对API接口注释

    Swagger是一个API开发者的工具框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文件系统服务器以同样的速度来更新,方法,参数和模型紧密集成到服务器端的代码中 ...

  5. 【原创】centos6创建sftp账号,并设置权限和目录

    网上找了个教程,折腾好长时间都不行,最后往死里整,终于弄好了,记录一下. 系统环境:Centos6.9 64bit 完美解决: Permission denied (publickey,gssapi- ...

  6. 【刷题】洛谷 P3950 部落冲突

    题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...

  7. 关于SDWebImage加载高清图片导致app崩溃的问题

    链接是对于SDWebImage的使用方法 http://www.cnblogs.com/JimmyBright/p/4457258.html 使用SDWebImage加载高清图片的时候,往往会报内存溢 ...

  8. number类型转化为string类型

    toString 方法 string = toString(num) 缺点: 不能转化 underfind 和 null 2 String 方法 string = String(num) 可以转化 u ...

  9. CF993E Nikita and Order Statistics 【fft】

    题目链接 CF993E 题解 我们记小于\(x\)的位置为\(1\),否则为\(0\) 区间由端点决定,转为两点前缀和相减 我们统计出每一种前缀和个数,记为\(A[i]\)表示值为\(i\)的位置出现 ...

  10. 洛谷 P1072 Hankson 的趣味题 解题报告

    P1072 \(Hankson\)的趣味题 题目大意:已知有\(n\)组\(a0,a1,b0,b1\),求满足\((x,a0)=a1\),\([x,b0]=b1\)的\(x\)的个数. 数据范围:\( ...