XML文件解析

时间:2023-03-08 20:20:31
XML文件解析

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

源文件

源文件的配置文件

测试文件

源文件的测试文件

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

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

xml只能有一个根标签

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

核心内容就是xml

解析的方法有两种

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

2sax是一行一行的解析

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

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

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

 package com.practice.tuhooo;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class Xmlparse { // 先获得DOM树
// Document在这里是dom4j里面的一个接口
public static Document getDoc(String url) throws DocumentException { // 新建一个读取xml文件的java对象
SAXReader reader = new SAXReader();
// 以url为参数调用read()方法获取对应的xml文档的对象
Document doc = reader.read(url);
return doc; // 返回doc对象 } public static void main(String[] args) throws DocumentException { Document doc = getDoc("conf/person.xml"); // 获得Document对象
Element root = doc.getRootElement(); // 获得根结点
List<Element> list = root.selectNodes("//age");
// List<Element> list = root.selectNodes("//class_/student/age"); 效果和上面的一样
System.out.println(list.size()); // 获得所有元素标签student的个数 for (Element i : list) {
System.out.println(i.getStringValue());
}
} }
 <?xml version="1.0" encoding="UTF-8"?>
<class_>
<student>
<name>刘德华</name>
<age>26</age>
</student>
<student>
<name>梁朝伟</name>
<age>24</age>
</student>
<student>
<name>黄渤</name>
<age>23</age>
</student>
<student>
<name>刘老根</name>
<age>24</age>
</student>
</class_>

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

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

XML文件解析

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

XML文件解析

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

XML文件解析