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