java dom4j解析xml 对象_Java XML解析 – 利用DOM4j解析XML

java dom4j解析xml 对象_Java XML解析 – 利用DOM4j解析XMLJavaXML解析-利用DOM4j解析XMLdom4j是一个简单的开源库,用于处理XML、XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。dom4j是目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XMLS…

大家好,又见面了,我是你们的朋友全栈君。

Java XML解析 – 利用DOM4j解析XML

dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。dom4j是目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理。

1. Iterator迭代解析xml

//测试xml文件

hello Text1

hello Text2

hello Text3

world text1

world text2

world text3

/**

* dom4j读取并解析xml

*/

public class Dom4JTest2

{

public static void main(String[] args) throws Exception

{

SAXReader saxReader = new SAXReader();

Document document = saxReader.read(new File(“students.xml”));

// 获取根元素

Element root = document.getRootElement();

System.out.println(“Root: ” + root.getName());

// 获取所有子元素

List childList = root.elements();

System.out.println(“total child count: ” + childList.size());

// 获取特定名称的子元素

List childList2 = root.elements(“hello”);

System.out.println(“hello child: ” + childList2.size());

// 获取名字为指定名称的第一个子元素

Element firstWorldElement = root.element(“world”);

// 输出其属性

System.out.println(“first World Attr: “

+ firstWorldElement.attribute(0).getName() + “=”

+ firstWorldElement.attributeValue(“name”));

System.out.println(“迭代输出———————–“);

// 迭代输出

for (Iterator iter = root.elementIterator(); iter.hasNext();)

{

Element e = (Element) iter.next();

System.out.println(e.attributeValue(“name”));

}

System.out.println(“用DOMReader———————–“);

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

// 注意要用完整类名

org.w3c.dom.Document document2 = db.parse(new File(“students.xml “));

DOMReader domReader = new DOMReader();

// 将JAXP的Document转换为dom4j的Document

Document document3 = domReader.read(document2);

Element rootElement = document3.getRootElement();

System.out.println(“Root: ” + rootElement.getName());

}

}

代码运行后输出:

Root: students

total child count: 6

hello child: 3

first World Attr: name=wangwu

迭代输出———————–

lisi

lisi2

lisi3

wangwu

wangwu2

null

用DOMReader———————–

Root: students

2. 使用xpath解析XML

//studentInfo.xml

崔卫兵

PC学院

62354666

男,1982年生,硕士,现就读于北京邮电大学

cwb

PC学院

62358888

男,1987年生,硕士,现就读于中国农业大学

xxxxx

xxx学院

66666666

注视中,注释中

lxx

yyyy学院

88888888

注视中111,注释中222

/**

* 利用dom4j与XPath进行XML解析

*/

public class Dom4jReadExmple {

/**

* 利用XPath操作XML文件,获取指定节点或者属性的值,并放入HashMap中

* @param filename String 待操作的XML文件(相对路径或者绝对路径)

* @param hm       HashMap 存放选择的结果,格式:或者

*/

public void getSelectedNodeValue(String filename, HashMap < String, String > hm) {

try {

SAXReader saxReader = new SAXReader();

Document document = saxReader.read(new File(filename));

//获取学生姓名为”崔卫兵”的年龄

List list = document.selectNodes(“/students/student[name=\”崔卫兵\”]/@age”);

Iterator iter = list.iterator();

if (iter.hasNext()) {

Attribute attribute = (Attribute) iter.next();

hm.put(“崔卫兵-” + attribute.getName(), attribute.getValue());

} else {

hm.put(“崔卫兵-age”, “20”);

}

//获取学生姓名为”崔卫兵”的年龄

list = document.selectNodes(“/students/student[name=\”cwb\”]/@age”);

iter = list.iterator();

if (iter.hasNext()) {

Attribute attribute = (Attribute) iter.next();

hm.put(“cwb-” + attribute.getName(), attribute.getValue());

} else {

hm.put(“cwb-age”, “20”);

}

//获取学生姓名为”cwb”所在的学院名称

list = document.selectNodes(“/students/student[name=\”cwb\”]/college”);

iter = list.iterator();

if (iter.hasNext()) {

Element element = (Element) iter.next();

String name = element.getName();

String value = element.getText();

hm.put(“cwb-” + name, value);

}

//获取学生姓名为”cwb”所在学院的领导

list = document.selectNodes(“/students/student[name=\”cwb\”]/college/@leader”);

iter = list.iterator();

if (iter.hasNext()) {

Attribute attribute = (Attribute) iter.next();

hm.put(“cwb-college-” + attribute.getName(), attribute.getValue());

} else {

hm.put(“cwb-college-leader”, “leader”);

}

//获取学生姓名为”lxx”所在的学院名称

list = document.selectNodes(“/students/student[name=\”lxx\”]/college”);

iter = list.iterator();

if (iter.hasNext()) {

Element element = (Element) iter.next();

String name = element.getName();

String value = element.getText();

hm.put(“lxx-” + name, value);

}

//获取学生姓名为”lxx”所在学院的领导

list = document.selectNodes(“/students/student[name=\”lxx\”]/college/@leader”);

iter = list.iterator();

if (iter.hasNext()) {

Attribute attribute = (Attribute) iter.next();

hm.put(“lxx-college-” + attribute.getName(), attribute.getValue());

} else {

hm.put(“lxx-college-leader”, “leader”);

}

} catch(Exception ex) {

ex.printStackTrace();

}

}

}

/**

* 测试Dom4jReadExmple解析的情况

*/

public class TestDom4jReadExmple {

public static void main(String[] args) {

try{

//获取解析完后的解析信息

HashMap hashMap;

Dom4jReadExmple drb=new Dom4jReadExmple();

//利用XPath操作XML文件,获取想要的属性值

hashMap = new HashMap();

drb.getSelectedNodeValue(“studentInfo.xml”, hashMap);

System.out.println(“崔卫兵-age:”+hashMap.get(“崔卫兵-age”));

System.out.println(“cwb-age:”+hashMap.get(“cwb-age”));

System.out.println(“cwb-college:”+hashMap.get(“cwb-college”));

System.out.println(“cwb-college-leader:”+hashMap.get(“cwb-college-leader”));

System.out.println(“lxx-college:”+hashMap.get(“lxx-college”));

System.out.println(“lxx-college-leader:”+hashMap.get(“lxx-college-leader”));

}catch(Exception ex){

ex.printStackTrace();

}

}

}

运行结果

崔卫兵-age:25

cwbage:20

cwb-college:PC学院

cwb-college-leader:学院领导

lxx-college:yyyy学院

lxx-college-leader:leader

总结

DOM4j解析XML推荐使用xpath,xpath功能是非常强大的。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152017.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 文件读写api函数是什么_c语言文件的读和写

    文件读写api函数是什么_c语言文件的读和写文件操作API函数详解在VC中,大多数情况对文件的操作都使用系统提供的API函数,但有的函数我们不是很熟悉,以下提供一些文件操作API函数介绍:一般文件操作APICreateFile打开文件要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。ReadFile从文件中读取字节信息。在打开文件获得了文件句柄之后,则

    2022年10月26日
  • 罗马字符转换成数字「建议收藏」

    罗马字符转换成数字「建议收藏」罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如,罗马数字2写做 II ,即为两个并列的1。12写做 XII&nbs

  • 原生JS 扫雷游戏 自动插旗子 自定义雷区大小 雷数可调

    原生JS 扫雷游戏 自动插旗子 自定义雷区大小 雷数可调《扫雷》是Microsoft于1992年附带在Windows3.1操作系统中的单机游戏,它通过点击方格并以出现数字来判断附近雷的数量,将全部地雷做上标记即可胜利。最后在2015年7月发布的Windows10中移除了这个游戏。随机变换雷区颜色,以及其它CSS样式,动画效果全是CSS。点击网页上的元素触发游戏事件打开雷区。如果对于一个方格,其周围未打开的方格恰好全都有雷,那么这些雷将全部自动被标记为小红旗,而玩家只需要一直点击雷区直至雷区全被打开并胜利呈现YOUWIN~没错,全程左键操作。在地

  • 使用 memory_limit 限制 PHP 进程的内存使用「建议收藏」

    使用 memory_limit 限制 PHP 进程的内存使用

  • Java学习之基础语法篇

    java学习之路0x00前言学习java也有段时间了,写篇文章来记录一下学习内容。0x01java加载机制说到java不得不提的是java的类加载机制,java是一个依赖于jvm(也就是

    2021年12月11日
  • pdaf添加实例(2p7,type2)[通俗易懂]

    pdaf添加实例(2p7,type2)[通俗易懂]/***s5k2p7_pdaf.h**Copyright(c)2015QualcommTechnologies,Inc.*AllRightsReserved.*ConfidentialandProprietary-QualcommTechnologies,Inc.*/.vendor_id=QTI,.stats_dt=0x30

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号