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)


相关推荐

  • 可迭代对象 python_列表是可迭代对象吗

    可迭代对象 python_列表是可迭代对象吗引出问题:​如下面所示,存在一个类,并且产生了一个对象,现在想用for循环实现对象的迭代,结果报错了点击(此处)折叠或打开– coding: utf-8 –“””演示一个类是不可以迭代的结果存在报错信息 说明 A对象不是一个可以迭代的对象for i in A:TypeError: ‘Students’ object is not iterable“””class Students():def init(self):self.names = list()def add(self,

  • Linux系统安装RabbitMQ详细步骤

    Linux系统安装RabbitMQ详细步骤Erlang官方下载地址:https://www.erlang.org/downloadsRabbitMQ官方下载地址:https://www.rabbitmq.com/download.html一安装依赖包安装RabbitMQ之前必须要先安装所需要的依赖包可以使用下面的一次性安装命令yuminstallgccglibc-develmakencurses-developenssl-develxmlto-y二安装Erlang(1

  • PO模式深入封装

    PO模式深入封装目标1.能够采用继承的思想对PO模式进行深入的封装1.V6版本把共同操作提取封装到父类中,子类直接调用父类的方法,避免代码冗余1.对象库层-基类,把定位元素的方法定义在基类中2.操作层-基类,把对元素执行输入操作的方法定义在基类中1.1示例代码#base_page.pyfrompo.utilsimportDriverUtilcla…

  • MySQL修改表名注释

    MySQL修改表名注释MySQL修改表名注释altertabletest1comment’修改后的表的注释’;

  • byte与word的区别_女生类型分类

    byte与word的区别_女生类型分类在Visual C++ 6.0中,BYTE与WORD,DWORD本质上都是一种无符号整型,它们在WINDEF.H中被定义,定义如下:typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned long DWORD;也就是说BYTE是无符号的char型(char型本质上也是一…

  • Django设置超时时间_东1时区

    Django设置超时时间_东1时区前言我们都知道时区,标准时区是UTC时区,django默认使用的就是UTC时区,所以我们存储在数据库中的时间是UTC的时间,但是当我们做的网站只面向国内用户,或者只是提供内部平台使用,我们希望存储在

发表回复

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

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