dom4j读取xml

-----记录和回顾是一个比学习更重要的环节-----

一、首先,我们需要知道xml是做什么的

1.作为软件的配置文件

2.作为数据的载体(小型的数据库)

二、xml的语法

xml文件以xml后缀名结尾。

xml文件需要使用xml解析器去解析。浏览器内置了xml解析器。

1.标签

语法:<student></student>  开始标签  标签体内容  结束标签

1<student/>  <student></student> 空标签。没有标签体内容

2xml标签名称区分大小写。

3xml标签一定要正确配对。

4xml标签名中间不能使用空格

5xml标签名不能以数字开头

6)注意: 在一个xml文档中,有且仅有一个根标签

2.属性

语法: <Student name="eric">student</Student>

注意:

1)属性值必须以引号包含,不能省略,也不能单双引号混用!!!

2)一个标签内可以有多个属性,但不能出现重复的属性名!!!

3.注释

语言: <!--  xml注释 -->

4.文档声明

语法: <?xml version="1.0" encoding="utf-8"?>

version: xml的版本号

encoding: 解析xml文件时查询的码表(解码过程时查询的码表)

注意:

1)如果在ecplise工具中开发xml文件,保存xml文件时自动按照文档声明的encoding来保存文 件。

2)如果用记事本工具修改xml文件,注意保存xml文件按照文档声明的encoding的码表来保存,保证xml文件保存的码表和encoding是一致的。

5.转义字符

xml中内置了一些特殊字符,这些特殊字符不能直接被浏览器原样输出。如果希望把这些特殊字符按照原样输出到浏览器,对这些特殊字符进行转义。转义之后的字符就叫转义字节。

  特殊字符  转义字符

 <                &lt;

 >                &gt;

 "                 &quot;

&                 &amp;

空格            &nsbp;

三、dom4j解析xml

DOM解析原理:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

 1     /**
 2      * 遍历所有节点
 3      * @throws Exception 
 4      * 
 5      */
 6     @Test
 7     public void  test2 () throws Exception{
 8                 //1.创建一个xml解析器对象
 9         SAXReader saxReader = new SAXReader();
10         //2.读取xml文档,返回Document对象
11         Document read = saxReader.read(new File("./src/test.xml"));
12         Element rootElement = read.getRootElement();
13         getElement(rootElement);
14     }
15     
16     private void getElement(Element element){
17         System.out.println(element.getName());
18         Iterator<Node> it = element.nodeIterator();
19         while (it.hasNext()) {
20             Node node = it.next();
21             if (node instanceof Element) {
22                 Element element2 = (Element)node;
23                 getElement(element2);
24             }
25         }
26     }

输出结果:

students
student
name
age
student
name
age
View Code

获取属性:

 1     /**
 2      * 获取属性
 3      * @throws Exception 
 4      */
 5     @Test 
 6     public void test4() throws Exception{
 7         SAXReader saxReader =  new SAXReader();
 8         Document read = saxReader.read(new File("./src/test.xml"));
 9         Element element = read.getRootElement().element("student");
10         String attributeValue = element.attributeValue("id");
11         System.out.println(attributeValue);
12         Attribute idattr = element.attribute("id");
13         String name = idattr.getName();
14         System.out.println("name:"+name+"
"+"value:"+idattr.getValue());
15         List<Attribute> idattrs = element.attributes();
16         for(Attribute attribute : idattrs){
17             System.out.println("name:"+attribute.getName()+"   value:"+attribute.getValue());
18         }
19     }

获取单标签

 1     @Test
 2     public void test3() throws Exception{
 3         //1.读取xml文件
 4         SAXReader saxReader = new SAXReader();
 5         Document read = saxReader.read(new File("./src/test.xml"));
 6         Element rootElement = read.getRootElement();
 7 /*        System.out.println("rootElement:"+rootElement.getName());
 8         Element element = rootElement.element("student");
 9         System.out.println("element:"+element.getName());
10         Iterator<Element> elemIt = rootElement.elementIterator("student");
11         while(elemIt.hasNext()){
12             Element next = elemIt.next();
13             System.out.println(next.getName());
14         }*/
15         List<Element> elements = rootElement.elements();
16         //list的三种遍历方式1.普通遍历2.强化for循环3.迭代器
17         //1.list的普通遍历
18 /*        for(int i = 0 ;i < elements.size();i++)
19         {
20             Element element = elements.get(i);
21             System.out.println(element.getName());
22         }*/
23         //2.list的强化遍历
24 /*        for(Element element :elements){
25             System.out.println(element.getName());
26         }*/
27         //3.迭代器
28 /*        Iterator<Element> it = elements.iterator();
29         while(it.hasNext()){
30             Element next = it.next();
31             System.out.println(next.getName());
32         }*/
33         Element nameelement = read.getRootElement().element("student").element("name");
34         System.out.println(nameelement.getName());
35     }

获取文本

1     @Test
2     public void test5() throws Exception{
3         SAXReader saxReader = new SAXReader();
4         Document read = saxReader.read(new File("./src/test.xml"));
5         String text = read.getRootElement().element("student").element("name").getText();
6         System.out.println(text);
7     }

demo:将test.xml文件中的内容封装在类中

test.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <students>
 3     <student id = "001">
 4         <name>张三</name>
 5         <age>20</age>
 6     </student>
 7     <student id = "002">
 8         <name>李四</name>
 9         <age>25</age>
10     </student>
11 </students>

StudentTest.java

 1 package xmlRead;
 2 
 3 public class StudentTest {
 4     public String id;
 5     public String name;
 6     public String age;
 7     public String getId() {
 8         return id;
 9     }
10     public void setId(String id) {
11         this.id = id;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public String getAge() {
20         return age;
21     }
22     public void setAge(String age) {
23         this.age = age;
24     }
25     
26     @Override
27     public String toString() {
28         return "id:"+this.id +"  name:"+this.name+"     age:"+this.age;    
29     }
30 }

readStudent类

 1 public class ReadStudent {
 2     public static void main(String[] args) throws Exception {
 3         SAXReader saxReader = new SAXReader();
 4         Document doc = saxReader.read(new File("./src/test.xml"));
 5         Element rootElement = doc.getRootElement();
 6         Iterator<Element> eleIt = rootElement.elementIterator();
 7         while (eleIt.hasNext()) {
 8             Element element = eleIt.next();
 9             StudentTest student = new StudentTest();
10             student.setId(element.attributeValue("id"));
11             student.setName(element.elementText("name"));
12             student.setAge(element.elementText("age"));
13             System.out.println(student.toString());
14         }
15     }
16 }

输出结果:

id:001  name:张三     age:20
id:002  name:李四     age:25
View Code

读取一个完整的test.xml文件(仅读内容)

 1 /**
 2  * 读取一个完整的xml文件。
 3  * @author ihome
 4  *
 5  */
 6 public class readXMl {
 7     @Test
 8     public void test() throws Exception{
 9         SAXReader saxReader = new SAXReader();
10         Document read = saxReader.read(new File("./src/test.xml"));
11         Element rootElement = read.getRootElement();
12         StringBuffer sBuffer = new StringBuffer();
13         getElementCild(rootElement,sBuffer);
14         System.out.println(sBuffer.toString());
15     }
16     private void getElementCild(Element element,StringBuffer sBuffer){
17         sBuffer.append("<"+element.getName());
18         List<Attribute> attributes = element.attributes();
19         for(Attribute attribute:attributes){
20             sBuffer.append(" "+attribute.getName()+" = "+attribute.getValue());
21         }
22         sBuffer.append(">");
23         sBuffer.append(element.getText());
24         Iterator<Element> eleIt = element.elementIterator();
25         while(eleIt.hasNext()){
26             Element next = eleIt.next();
27             getElementCild(next,sBuffer);
28         }
29         sBuffer.append("</"+element.getName()+">");
30     }
31 }
原文地址:https://www.cnblogs.com/wy0904/p/7722232.html