XML文件解析

eclipse新建源文件的文件夹,编译后和src文件夹中放在一起

源文件

源文件的配置文件

测试文件

源文件的测试文件

一般用maven进行管理的时候就是这样

如果是小项目的话可能就src和resource这两个文件夹。

xml只能有一个根标签

相同类型对象定义同一个类型

核心内容就是xml

解析的方法有两种

1中是dom,所有的结点生成一个dom文档

2sax是一行一行的解析

dom的内存占用率大,sax占用的内存小

dom4j是一个jar包用于解析xml的

如果已经是有了一个xml文件进行解析想要获得值的话,还是要用的选择器啊。

  1 package com.practice.tuhooo;
  2 import java.util.List;
  3 import org.dom4j.Document;
  4 import org.dom4j.DocumentException;
  5 import org.dom4j.Element;
  6 import org.dom4j.io.SAXReader;
  7 
  8 public class Xmlparse {
  9 
 10     // 先获得DOM树
 11     // Document在这里是dom4j里面的一个接口
 12     public static Document getDoc(String url) throws DocumentException {
 13 
 14         // 新建一个读取xml文件的java对象
 15         SAXReader reader = new SAXReader();
 16         // 以url为参数调用read()方法获取对应的xml文档的对象
 17         Document doc = reader.read(url);
 18         return doc;        // 返回doc对象
 19 
 20     }
 21 
 22     public static void main(String[] args) throws DocumentException {
 23 
 24         Document doc = getDoc("conf/person.xml");     // 获得Document对象
 25         Element root = doc.getRootElement();  // 获得根结点
 26         List<Element> list = root.selectNodes("//age");
 27         // List<Element> list = root.selectNodes("//class_/student/age"); 效果和上面的一样
 28         System.out.println(list.size());  // 获得所有元素标签student的个数
 29 
 30         for (Element i : list) {
 31             System.out.println(i.getStringValue());
 32         }
 33     }
 34 
 35 }

 

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <class_>
  3     <student>
  4         <name>刘德华</name>
  5         <age>26</age>
  6     </student>
  7     <student>
  8         <name>梁朝伟</name>
  9         <age>24</age>
 10     </student>
 11     <student>
 12         <name>黄渤</name>
 13         <age>23</age>
 14     </student>
 15     <student>
 16         <name>刘老根</name>
 17         <age>24</age>
 18     </student>
 19 </class_>

这里遇到了一个问题很奇怪,当用根节点获取student结点并采取两种不同的打印方式来获取内容的时候出现了这种情况

  1 Element root = doc.getRootElement();  // 获得根结点
  2 List<Element> list = root.selectNodes("//student");
  3 // List<Element> list = root.selectNodes("//class_/student/age"); 效果和上面的一样
  4 System.out.println(list.size());  // 获得所有元素标签student的个数
  5 
  6 for (Element i : list) {
  7     System.out.println(i.getStringValue());
  8 }

XML文件解析

 

 

  1 Element root = doc.getRootElement();  // 获得根结点
  2 List<Element> list = root.selectNodes("//student");
  3 // List<Element> list = root.selectNodes("//class_/student/age"); 效果和上面的一样
  4 System.out.println(list.size());  // 获得所有元素标签student的个数
  5 
  6 for (Element i : list) {
  7     System.out.println(i.getText());
  8 }

XML文件解析

如果像下图这样加"sdf"的话,用getText()就可以打印出这个字符串,getText()是用来获取标签里面的文本的,终于解释地通了。

XML文件解析