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原创文章,未经本站允许不得转载。

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 通过经纬度计算距离的公式是什么_excel经纬度计算距离公式

    通过经纬度计算距离的公式是什么_excel经纬度计算距离公式原文地址:http://www.storyday.com/html/y2009/2212_according-to-latitude-and-longitude-distance-calculation-formula.html在去年cosbeta曾经发布了一个网页计算工具,这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离。经纬度到距离的计算在通信工程中应用比较广泛,所以cosbet

    2022年9月23日
  • c语言入门教程–-4运算符

    c语言入门教程–-4运算符

    2021年3月12日
  • Mysql判断计算结果,除以100

    Mysql判断计算结果,除以100

    2021年7月13日
  • Win10 1709 无法访问局域网共享问题及解决[通俗易懂]

    Win10 1709 无法访问局域网共享问题及解决[通俗易懂]摘要Win10升级更新为1709以后,出现了不能匿名访问局域网共享,同时本机的共享也无法被其它机器匿名访问。本文给出了设置方法来解决此问题。1.前言Win10的安全性设置越来越严格,与此同时,也带来了易用性的缺失。新手往往会陷入很多功能不能使用的窘境中,从而导致了对Win10的排斥。局域网共享就是一个很典型的例子。对很多中小企业而言,无密码的局域网共享是非常方便和实用的功能,对于提…

    2022年7月12日
  • 基于DB4O的Java Map

    基于DB4O的Java MapJava的Map是大家最常用的一个容器接口,它通过灵活的key/value结构存储数据。因为Map的简单易用很多工程师喜欢大量使用Map存放数据。但是Map的数据是存放在内存中,大量的数据存在内存中,不只是造成Java系统内存遍历慢的隐忧,更加可能系统内存溢出。针对这个问题,我们重新利用DB4O实现Map的接口,利用DB4O的对象高效的物理存储特性来减轻Java的内存压力。

    2022年7月21日
  • VMI管理常见的业务场景(一)[通俗易懂]

    VMI管理常见的业务场景(一)[通俗易懂]VMI管理常见的业务场景(一)什么是VMI管理?和传统库存管理的差别VMI是供应商管理库存(VendorManagedInventory)的简称,为了界定清楚这个新的库存管理思想,需要弄明白它和传统库存管理的差别。传统库存管理是指对物料的收发存的业务管理,是各节点企业独立管理自有库存,最明显的缺点是容易存在库存管理的牛鞭效应、上下游企业利益对抗、合作与沟通困难等问题。VMI库存管理系统能够突破传统的条块分割的库存管理模式,VMI是一种在用户和供应商之间…

    2022年5月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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