java中dom方式读取xml,怎样根据xml的某个属性找到指定节点?? 比如id属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中dom方式读取xml,怎样根据xml的某个属性找到指定节点?? 比如id属性相关的知识,希望对你有一定的参考价值。

Element rootEle = dom.getRootElement();
rootEle.getAttributeValue("id") 还是rootEle.getChild(name)?

最好有个XML例子 不清楚说的指定节点是啥意思
参考技术A 用dom4j
xpath
http://www.zvon.org/xxl/XPathTutorial/General/examples.html追问

还是不大明白,能说具体点吗?最好有代码

追答

上面
导入dom4j所需的jar包
SAXReader reader = new SAXReader();
Document document = reader.read(new File(path));
Element e = (Element) document.selectSingleNode("xpath");
xpath的就看教程了。

参考技术B 看了你写的代码。是用sax解析xml啊,不用导入dom4j

Java获取XML节点总结之读取XML文档节点

dom4j是Java的XML API,用来读写XML文件的。目前有很多场景中使用dom4j来读写xml的。
要使用dom4j开发,需要下载导入dom4j相应的jar文件。
官网下载:http://www.dom4j.org/dom4j-1.6.1/
github下载:http://dom4j.github.io/
下载解压之后如图所示:

技术分享

我们只需要把dom4j-1.6.1.jar文件构建到我们开发项目中就可以了。

技术分享

 


下面就以Eclipse创建java项目的构建方法为例说明:
声明:本Java项目的开发环境JDK1.8,Eclipse版本 Neon.1 Release (4.6.1)
首先创建一个demo项目:

技术分享

在demo项目中创建一个lib文件,把dom4j-1.6.1.jar文件拷贝到lib中,然后右键dom4j-1.6.1jar文件。如图所示:

技术分享

 


点击Add to Bulid Path即可构建到项目中去了。
导入成功如图所示:

技术分享

 

在项目开发的过程中可以参考docs文件夹的(帮助文档),找到index.html打开,点击Quick start可以通过帮助文档进行学习 dom4j进行xml的解析。
如图所示:

技术分享


下面我将以详细例子去介绍Java操作xml文件,文件名为exmple.java。

 1 package vastsum;
 2 
 3 import java.io.File;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 
 7 import org.dom4j.Document;
 8 import org.dom4j.DocumentException;
 9 import org.dom4j.Element;
10 import org.dom4j.Node;
11 import org.dom4j.io.SAXReader;
12 
13 /**
14  * 读取下xml文档,获得document对象。
15  * 本文为xml连载第一篇,以下代码可以直接运行,结尾附上源码下载地址。
16  */
17 class exmple {
18     public static void main(String[] args) throws DocumentException
19     {
20         SAXReader reader = new SAXReader();
21         Document document = reader.read(new File("./src/contact.xml"));
22         
23         /**
24          * 节点对象的操作方法
25          */
26         
27         //获取文档根节点
28         Element root = document.getRootElement();
29         //输出根标签的名字
30         System.out.println(root.getName());
31         
32         
33         //获取根节点下面的所有子节点(不包过子节点的子节点)
34         List<Element> list = root.elements() ;
35         //遍历List的方法
36         for (Element e:list){
37             System.out.println(e.getName());
38         }
39         
40         
41         //获得指定节点下面的子节点
42         Element contactElem = root.element("contact");//首先要知道自己要操作的节点。 
43         List<Element> contactList = contactElem.elements();
44         for (Element e:contactList){
45             System.out.println(e.getName());
46         }    
47         
48         
49         //调用下面获取子节点的递归函数。
50         getChildNodes(root);
51         
52         
53         //获得当前标签下指定名称的第一个子标签
54         Element conElem = root.element("contact");
55         System.out.println(conElem.getName());
56         
57         
58         //获得更深层次的标签(一层一层的获取)
59         Element nameElem = root.element("contact").element("name");
60         System.out.println(nameElem.getName());
61     }
62     
63     //递归查询节点函数,输出节点名称
64     private static void  getChildNodes(Element elem){
65         System.out.println(elem.getName());
66         Iterator<Node> it=    elem.nodeIterator();
67         while (it.hasNext()){
68             Node node = it.next();
69             if (node instanceof Element){
70                 Element e1 = (Element)node;
71                 getChildNodes(e1);
72                 }
73             
74             }
75         }
76     
77     
78 }

下面是对应的xml文件,文件名为contact.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <contactList>
 3     <contact id="001" class="style">
 4         <name>张三</name>
 5         <age>20</age>
 6         <phone>134222223333</phone>
 7         <email>[email protected]</email>
 8         <qq>432221111</qq>
 9     </contact>
10     <contact id="002">
11         <name>李四</name>
12         <age>20</age>
13         <phone>134222225555</phone>
14         <email>[email protected]</email>
15         <qq>432222222</qq>
16     </contact>
17     <contactTwo>
18         <name>王五</name>
19         <age>32</age>
20         <phone>465431341</phone>
21         <emali>[email protected]</emali>
22         <qq>46164694</qq>
23     </contactTwo>
24     <test>测试</test>
25     <test>其他用途</test>
26 </contactList>

两个文件的目录如题所示:

技术分享

以上是关于java中dom方式读取xml,怎样根据xml的某个属性找到指定节点?? 比如id属性的主要内容,如果未能解决你的问题,请参考以下文章

在java项目中怎样利用Dom4j解析XML文件获取数据

java 怎样解析 excel生成的xml文件

java解析xml文件,会把节点属性中的换行转换成空格,怎样才能避免此类转换,即保留换行

java--xml文件读取(DOM)

Java文件操作——XML文件的读取

怎么使用java导出大数据为xml文件