前言
今天和师傅聊天,然后师傅给我布置了一个小Demo让我联系下,将XML解析成对应的实体类,我的初衷是分别用Dom4j还有SAX解析顺便对比下两种方式的区别以及是否有联系
第一种方式Dom4j的方式进行解析
1.我采用Maven项目
<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
先将这个配置放到你的pom.xml中
2.解决一个小问题在Maven项目中如何读取Resources下面的文件
文件结构如下
读取的代码如下
@Test
public void test1() {
ClassLoader classLoader = TestReaderXML.class.getClassLoader();
String resource = classLoader.getResource(“resources/parents.xml”).getFile();
File file = new File(resource);
if (file.exists()) {System.out.println("文件读取到了"); return; } System.out.println("文件没有读取到"); return; }
运行结果
下面我们来继续
XML文件为:
<?xml version="1.0" encoding="UTF-8"?> <parents> <parent> <name>Mrs.zhang</name> <age>18</age> <address>东北</address> </parent> <parent> <name>Mrs.wang</name> <age>19</age> <address>河南</address> </parent> <parent> <name>Mrs.li</name> <age>20</age> <address>河北</address> </parent> </parents>
测试方法为:
public class AnalyzeXMLofDom4j { public static void main(String[] args) { /** 将文件读取成一个File流文件 */ ClassLoader classLoader = AnalyzeXMLofDom4j.class.getClassLoader(); String resource = classLoader.getResource("resources/parents.xml").getFile(); File file = new File(resource); // 创建SaxReader对象 SAXReader reader = new SAXReader(); try { // 通过read方法读取一个文件,转化成Document对象 Document document = reader.read(file); // 获取根节点元素对象 Element root = document.getRootElement(); /** 1. 将根节点的名字打出来*/ System.out.println(root.getName()); /** 2. 下面继续将所有的xml信息都读出来*/ Iterator<?> iterator = root.elementIterator(); while (iterator.hasNext()) { /** 将元素迭代起来 */ Element childElement = (Element)iterator.next(); /** 这样子是不是 复杂度很高呀 */ /** parent 子元素集合 */ Element elementName = childElement.element("name"); String valueName = elementName.getText(); Element elementAge = childElement.element("age"); String valueAge = elementAge.getText(); Element elementAddress = childElement.element("address"); String valueAddress = elementAddress.getText(); System.out.println("---------"); System.out.println(valueName); System.out.println(valueAge); System.out.println(valueAddress); } System.out.println("下一个真正的子元素~"); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果为:
代码的百度云盘地址为: https://pan.baidu.com/s/1vEp5iHGV-8DkhD4zaE97lw