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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python生成矩阵 元素随机_用python生成随机矩阵「建议收藏」

    python生成矩阵 元素随机_用python生成随机矩阵「建议收藏」在下面的代码中,我对一般的平方线性系统Ax=b实现了带有部分旋转的高斯消去。我测试了我的代码,它产生了正确的输出。不过,现在我正在尝试做以下事情,但我不太确定如何编码它,寻找一些帮助与此!我想通过求解Ax=b来测试我的实现,其中A是随机的100×100矩阵,b是随机的100×10向量。在我的代码中,我把矩阵A=np.array([[3.,2.,-4.],[2.,3.,3.],[5.,-3.,1…

    2025年7月12日
    0
  • js二维码生成

    详细介绍可以查看API网站:http://code.ciaoca.com/javascript/qrcode/ (前端开发仓库)一、引入js文件&amp;lt;!– 第一步:引进js文件 –&amp;gt; &amp;lt;script type=”text/javascript” src=”js/jquery.min.js”&amp;gt; \ &amp;lt;script type=”text/java…

    2021年11月30日
    45
  • SecureCRTPortable样式设置

    SecureCRTPortable样式设置SecureCRTPortable高大上设置背景设置进入界面——最上方选项——会话选项——外观,进行如下设置设置完成后就会出现高大上的大神界面

    2022年4月29日
    80
  • 使用Setup Factory安装包制作工具制作安装包

    使用Setup Factory安装包制作工具制作安装包在我们开发完软件后,除了极个别案例我们把整个目录复制给客户用外,我们一般都需要做成安装包,方便整个软件的部署操作,以安装包的部署操作可能简单的是复制文件,也可能包括一些注册表、数据库等额外的操作,不过

    2022年7月3日
    28
  • 工作中总结前端开发流程–vue项目

    工作中总结前端开发流程–vue项目

    2021年7月1日
    90
  • 自己实现directui库_开源界面库

    自己实现directui库_开源界面库1.duilib简介duilib是一个开源的DirectUI界面库,简洁但是功能强大。而且还是BSD的license,所以即便是在商业上,大家也可以安心使用。现在大家可以从这个网站获取到他们所有的

    2022年8月4日
    3

发表回复

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

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