dom4j dom4j解析xml

dom4j dom4j解析xml

最近在学习dom4j的使用。

一直在思考一个问题,对于一种全新的或者说自己没接触过的技术,应该怎么样才能更好的上手并能尽可能的理解原理呢?

以前是怎么做的?

GOOGLE或者BAIDU找个最简单的例子,再下载到本地测试,然后跟着具体的需要来改。如果时间很久的话,这是比较有效的,因为能在项目中尽快的应付过去,可是这种事情多了,就有问题了,就会有太多的知其然不知其所以然,所花的时间对于原理的积累上一点都没有,而对于理解大师们的设计编程思想更是一点体会都没有,有的只是,好像有这么个东西,可以用来处理什么什么,好像还挺好用,有时还不懂怎么用!

现在想怎么做?

任何技术框架的出现都是为了方便的解决某些本来处理起来比较麻烦的技术而出现的。因此,对于原有的技术要有一个了解,知道原来出来时的麻烦。

接着,在对新技术可以按自己的理解,想,猜它会提供哪些帮助,然后再看介绍和了解它具体所提供的功能。

最后,才是练习。

麻烦:用Java本身的API来解释XML,有一个麻烦就是定位的不方便,这有点类似HTML用DOM来定位到具体某个组件的情况,而jQuery的出现就比较好的解决了这个问题。

因此可以猜

1、dom4j应该能提供这个帮助

<?xmlversion="1.0"encoding="UTF-8"?>

<USERS>

<USERID="0001">

<NAME>张三</NAME>

<SEX>男</SEX>

<AGE>20</AGE>

</USER>

<USERID="0002">

<NAME>李四</NAME>

<SEX>男</SEX>

<AGE>22</AGE>

</USER>

<USERID="0003">

<NAME>王五</NAME>

<SEX>男</SEX>

<AGE>24</AGE>

</USER>

</USERS>

2、类似这个users.XML,在USERS下有多个USER,那么dom4j也应该提供方便的获取所有USER标签的功能。

3、对于一个节点来说,比如<USER>,它有本身的名称,有自己的属性,也有可能有自己的子节点,而类似<NAME>还有它的值,通过dom4j应该怎么获取等等等等

怎么做?

1、导入dom4j的jar文件以及它所依赖的jar包

2、要解释XML,那怎么把读要解释的XML文件呢?那么多个类,我那知道用那个方法啊?但是因为是读文件,因此有没有个方法类似read(File)的呢?因此



点进去可以看到该方法的类是:SAXReader,还可以看到有read(InputStream)这个方法

因此:

SAXReaderreader=newSAXReader();

Documentdocument=reader.read(Dom4jTest.class.getResourceAsStream("users.xml"));

查看Document的API,知道有如下功能

1、获取Document文档的跟ROOT:document.getRootElement()

2、获取节点的名称:element.getName()

3、获取节点的所有属性:List<Attribute>attributeList=element.attributes();

4、获取属性名称:attribute.getName();

5、获取属性值:attribute.getData();

6、获取节点的所有直接子节点:

经过测试可以知道,elements()方法只会获取它的直接子节点Element

List<Element>elements=document.getRootElement().elements();

for(Elementelement:elements){

System.out.println(element.getName());

}

7、获取节点的值:element.getData()或者element.getText()

Dom4j结合XPATH就能更灵活的定位和选择,例如

Document.selectNodes("/USERS/USER");就把所有的USER节点都找到了

http://www.w3school.com.cn/xpath/xpath_syntax.asp

例子:

<? xmlversion="1.0"encoding="UTF-8"?>

<USERS>

<USER>

<id>0001</id>

<name>张三</name>

<sex>男</sex>

<age>20</age>

<address>北京</address>

</USER>

<USER>

<id>0002</id>

<name>李四</name>

<sex>男</sex>

<age>22</age>

<address>上海</address>

</USER>

<USER>

<id>0003</id>

<name>王五</name>

<sex>男</sex>

<age>24</age>

<address>南京</address>

</USER>

</USERS>

<?xmlversion="1.0"encoding="UTF-8"?>

<USERS>

<USER id="0001"address="北京">

<name>张三</name>

<sex>男</sex>

<age>20</age>

</USER>

<USERid="0002"address="上海">

<name>李四</name>

<sex>男</sex>

<age>22</age>

</USER>

<USERid="0003"address="南京">

<name>王五</name>

<sex>男</sex>

<age>24</age>

</USER>

</USERS>

publicclassUser{

privateStringid;

privateStringname;

privateStringsex;

privateIntegerage;

privateStringaddress;

//gettersetter......

@Override

publicStringtoString(){

return"ID="+id+",NAME="+name+",SEX="+sex+",AGE="+age+",ADDRESS="+address;

}

}


packagecom.xieqing.dom4j;

importjava.util.ArrayList;

importjava.util.List;

importorg.apache.commons.beanutils.BeanUtils;

importorg.dom4j.Attribute;

importorg.dom4j.Document;

importorg.dom4j.Element;

importorg.dom4j.io.SAXReader;

@SuppressWarnings("unchecked")

publicclassDom4jTest{

publicstaticvoidmain(String[]args)throwsException{

simpleTest();

System.out.println("-----------------------------------------------------------");

testXpath();

}

publicstaticvoidsimpleTest()throwsException{

SAXReaderreader=newSAXReader();

Documentdocument=reader.read(Dom4jTest.class.getResourceAsStream("users1.xml"));

List<User>userList=newArrayList<User>();

Useruser=null;

//遍历根节点下的所有直接子节点

for(Elementelement:document.getRootElement().elements()){

user=newUser();

List<Element>elList=element.elements();

//遍历USER节点下的所有子节点,并设置到user里

for(Elementel:elList){

BeanUtils.setProperty(user,el.getName(),el.getText());

}

userList.add(user);

}

System.out.println(userList);

}

publicstaticvoidtestXpath()throwsException{

SAXReaderreader=newSAXReader();

Documentdocument=reader.read(Dom4jTest.class.getResourceAsStream("users2.xml"));

List<User>userList=newArrayList<User>();

//读取//USERS/USER这个路径下的所有USER节点

List<Element>userElements=(List<Element>)document.selectNodes("//USERS/USER");

Useruser=null;

for(Elemente:userElements){

user=newUser();

//读取USER节点下的所有属性

List<Attribute>attrList=(List<Attribute>)e.selectNodes("@*");

for(Attributeattr:attrList){

BeanUtils.setProperty(user,attr.getName(),attr.getData());

}

//读取USER节点下的所有节点

List<Element>elList=(List<Element>)e.selectNodes("*");

for(Elementel:elList){

BeanUtils.setProperty(user,el.getName(),el.getData());

}

userList.add(user);

}

System.out.println(userList);

}

}

  

爱华网本文地址 » http://www.413yy.cn/a/25101014/235040.html

更多阅读

DNF凯丽强化盛典活动解析 dnf凯丽高级装备强化

DNF凯丽强化盛典活动解析——简介说起凯丽,那可是阿拉德大陆有名的美女,是极好的女枪导师和装备强化大师。但是,对于玩家来说,就是仁者见仁,智者见智了。这不,凯丽这美女又打出了招牌【强化8.6折】,新一轮的强化盛典活动开始了,据说有五重强

DNF鬼泣第七鬼神之解析 dnf鬼泣去鬼神补丁

加点如上:  我只对争议大的做评论,请大家理解!DNF鬼泣第七鬼神之解析——步骤/方法DNF鬼泣第七鬼神之解析 1、  1.裂波出强制主要是连招和起手技能的作用,因为鬼的月光斩不霸体,十字都可以破,1点你也可以按出来,但是上挑起来,十字,三刀你

赛尔号九尾火狐解析 赛尔号九尾火狐特性

赛尔号九尾火狐解析——简介赛尔号九尾火狐解析赛尔号九尾火狐解析——方法/步骤赛尔号九尾火狐解析 1、种族值:一只精灵长得再帅,如果没有一个好种族,那么他也素不值得练得!让我们来看看九尾的种族吧!攻击:80(越低越好- -) 极限:285

解析橄榄油美容护肤的作用及方法 橄榄油护肤作用

解析橄榄油美容护肤的作用及方法——简介橄榄油的用途有很多,而最为让人津津乐道的便是它的美容作用。用橄榄油怎么护肤美容呢?橄榄油的作用有哪些呢?小编支招教你如何使用橄榄油护肤。解析橄榄油美容护肤的作用及方法——方法/步骤解

股票公式全解析:16 股票软件源码引入

股票公式全解析:[16]股票软件源码引入——简介我们上一篇文章主要说明了大智慧的源码引入的基本方法,大家在使用这个源码的时候一定要注意具体的设置,按照我的要求一步一步实现,源码的编写我会专门有一个介绍,现在我继续说明其他股票软件

声明:《dom4j dom4j解析xml》为网友嘘呐花开了分享!如侵犯到您的合法权益请联系我们删除