解析xml的方式有三种:Sax,Dom,Pull。这里简单介绍一下Dom解析(Dom4j),要提前导入dom4j.jar包。
要解析的xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://www.example.org/web-app_2_5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/web-app_2_5 web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>Hello World</servlet-name>
<servlet-class>agasgas</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello World</servlet-name>
<url-pattern>sagasg</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>
</web-app>
解析xml文件的简单步骤:
- 获取解析器:
SAXReader saxReader = new SAXReader();
- 通过解析器的read(url)方法解析xml文件获取document操作对象:
Document document = saxReader.read("src/TestDom4j/test.xml");
传入内容为xml文件的路径(url)。 - 通过document的getRootElement()方法获取根节点:
Element rootElement = document.getRootElement();
- 通过根节点的elements()方法获取根节点下的所有子节点(返回值为装有所有子节点的List列表):
List<Element> childElements = rootElement.elements();
- 遍历列表,通过判断子节点的名称(element.getName()方法获取子节点名称)与要解析的信息是否相等来获取信息,通过子节点的element(String string)方法获取子节点的子节点,getText()方法获取子节点的文本信息。
for (Element element : childElements) {
if("servlet".equals(element.getName())) {
String servletName = element.element("servlet-name").getText();
String servletClass = element.element("servlet-class").getText();
}
}
完整代码:
package TestDom4j;
import java.util.List;
import java.util.jar.Attributes.Name;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
public class TessDom4j {
@Test
public void dom4jTest(){
try {
//1.获取解析器
SAXReader saxReader = new SAXReader();
//2.读取xml文件获得document对象
Document document = saxReader.read("src/TestDom4j/test.xml");
//3.获得根节点
Element rootElement = document.getRootElement();
//4.获得根节点下的所有子节点,返回一个List列表
List<Element> childElements = rootElement.elements();
//5.遍历所有子节点,并得到想要的数据
for (Element element : childElements) {
if("servlet".equals(element.getName())) {
String servletName = element.element("servlet-name").getText();
String servletClass = element.element("servlet-class").getText();
}
if("servlet-mapping".equals(element.getName())) {
String servletName = element.element("servlet-name").getText();
String urlPattern = element.element("url-pattern").getText();
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}