一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识。看到了xml解析,目前我还没用到过。但多了解一下,加深点记忆和理解也无害处,权当复习吧。

  在此只写下常见的三种XML解析方法,即DOM解析、SAX解析、DOM4J解析。

  先上一份xml文件,关于xml文件的格式和创建方法,在此不多说了。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <root>
 3     <class name="class1">
 4         <student>
 5             <name>张三</name>
 6             <age>20</age>
 7             <sex></sex>
 8         </student>
 9         <student>
10             <name>Andy</name>
11             <age>22</age>
12             <sex>female</sex>
13         </student>
14     </class>
15     <class name="class2">
16         <student>
17             <name>李四</name>
18             <age>15</age>
19             <sex></sex>
20         </student>
21         <student>
22             <name>bigbang</name>
23             <age>21</age>
24             <sex></sex>
25         </student>
26     </class>
27 </root>

 

DOM解析是一种消耗内存的解析方法,它先将整个xml文档装入内存,然后顺序读取,解析也是有些复杂,具体的操作都在注释中,不多说了。

 1 import java.io.IOException;
 2 import java.util.ArrayList;
 3 import java.util.List;
 4 
 5 import javax.xml.parsers.DocumentBuilder;
 6 import javax.xml.parsers.DocumentBuilderFactory;
 7 import javax.xml.parsers.ParserConfigurationException;
 8 
 9 import org.w3c.dom.Document;
10 import org.w3c.dom.Element;
11 import org.w3c.dom.Node;
12 import org.w3c.dom.NodeList;
13 import org.xml.sax.SAXException;
14 
15 import com.entity.Student;
16 
17 public class DOMParse {
18 
19     private Student student;
20     private List<Student> students;
21 
22     public void pasre() {
23         students = new ArrayList<Student>();
24         try {
25             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
26             DocumentBuilder builder = dbf.newDocumentBuilder();
27             // 在此没有使用InputStream作为参数,直接引用文件路径。
28             Document doc = builder.parse("src/com/parseDom/test.xml");
29             // 获取整个document元素
30             Element element = doc.getDocumentElement();
31             // 获取所有<class>子节点
32             NodeList list = element.getElementsByTagName("class"); // <class>
33             // 遍历class子节点
34             for (int i = 0; i < list.getLength(); i++) {
35                 Element el = (Element) list.item(i);
36                 // 获取<student>节点
37                 NodeList stus = el.getElementsByTagName("student"); // <student>
38                 // 遍历student子节点
39                 for (int j = 0; j < stus.getLength(); j++) {
40                     /**
41                      * 获取student下所有子节点 此处有7个节点,分别是#text<name> #text<sex>
42                      * #text<age> #text
43                      * 对应的xml实际是<student>、<name>、#name、<sex>、#sex
44                      * 、<age>、#age这七个子节点
45                      * **/
46                     NodeList lis = stus.item(j).getChildNodes();
47                     // 每个student节点输出就是一个Student对象
48                     student = new Student();
49                     for (int k = 0; k < lis.getLength(); k++) {
50                         // 当元素为节点元素时(非textValue),对比后取值
51                         if (lis.item(k).getNodeType() == Node.ELEMENT_NODE) {
52                             if ("name".equals(lis.item(k).getNodeName())) { // <name>
53                                 student.setName(lis.item(k).getFirstChild().getNodeValue());
54                             }
55                             if ("sex".equals(lis.item(k).getNodeName())) { // <sex>
56                                 student.setSex(lis.item(k).getFirstChild().getNodeValue());
57                             }
58                             if ("age".equals(lis.item(k).getNodeName())) { // <age>
59                                 student.setAge(Integer.parseInt(lis.item(k).getFirstChild().getNodeValue()));
60                             }
61                         }
62                     }
63                     students.add(student);
64                 }
65             }
66 
67         } catch (ParserConfigurationException e) {
68             e.printStackTrace();
69         } catch (SAXException e) {
70             e.printStackTrace();
71         } catch (IOException e) {
72             e.printStackTrace();
73         } finally {
74             for (Student stus : students) {
75                 System.out.println(stus.getName() + "--" + stus.getSex() + "--" + stus.getAge());
76             }
77         }
78     }
79 
80     public static void main(String[] args) {
81         DOMParse domParse = new DOMParse();
82         domParse.pasre();
83     }
84 }
View Code

相关文章:

  • 2021-10-03
  • 2022-12-23
  • 2022-12-23
  • 2022-03-07
  • 2022-12-23
  • 2021-07-14
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-16
  • 2022-12-23
  • 2021-12-08
  • 2021-12-05
  • 2022-12-23
  • 2021-08-09
  • 2021-12-31
相关资源
相似解决方案