• DOM方式解析XML


    元素VS节点

    节点包括:元素节点、属性节点、文本节点。元素一定是节点,但是节点不一定是元素。

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <student>
    3     <name id="001">张三</name>
    4     <sex></sex>
    5     <age>20</age>
    6 </student>

    文本节点:张三 男  20

    元素节点:student  name  sex  age

    属性节点id="001"

    DOM方式解析XML原理

    基于DOM(Document Object Model,文档对象模型)解析方式,是把整个XML文档加载到内存,转化成DOM树,因此应用程序可以随机的访问DOM树的任何数据;

    优点:灵活性强,速度快;

    缺点:消耗资源比较多;

    DOM方式解析XML示例

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <student>
    3     <name id="001">张三</name>
    4     <sex></sex>
    5     <age>20</age>
    6 </student>

    java文件:

     1 package com.java1234.xml;
     2 import javax.xml.parsers.DocumentBuilder;
     3 import javax.xml.parsers.DocumentBuilderFactory;
     4 import org.w3c.dom.Document;
     5 import org.w3c.dom.Element;
     6 import org.w3c.dom.NodeList;
     7 
     8 public class DOM01 {
     9     public static void main(String[] args) {
    10         DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//利用DocumentBuilderFactory.newInstance();
    11         try {
    12             DocumentBuilder builder=factory.newDocumentBuilder();//利用Builder
    13             Document doc=builder.parse("src/demo01.xml");//读取文件
    14             NodeList nodelist=doc.getElementsByTagName("student");//寻找节点
    15             Element e=(Element)nodelist.item(0);
    16             System.out.println("姓名:"+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());//解析节点
    17             System.out.println("年龄:"+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());//解析年龄
    18             System.out.println("性别:"+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue());//解析性别
    19         } catch (Exception e) {
    20             // TODO Auto-generated catch block
    21             e.printStackTrace();
    22         }
    23     }
    24 }

    这样可以把信息顺利的解析出来。

    再来看一下复杂一些的例子:

    多个信息:

    students.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <students>
     3     <student>
     4         <name id="001">张三</name>
     5         <sex></sex>
     6         <age>20</age>
     7     </student>
     8     <student>
     9         <name xx="002">李四</name>
    10         <sex></sex>
    11         <age>18</age>
    12     </student>
    13 </students>

    解析:

     1 package com.java1234.xml;
     2 
     3 import javax.xml.parsers.DocumentBuilder;
     4 import javax.xml.parsers.DocumentBuilderFactory;
     5 import javax.xml.parsers.ParserConfigurationException;
     6 import org.w3c.dom.Document;
     7 import org.w3c.dom.Element;
     8 import org.w3c.dom.NamedNodeMap;
     9 import org.w3c.dom.Node;
    10 import org.w3c.dom.NodeList;
    11 
    12 import com.sun.tracing.dtrace.NameAttributes;
    13 
    14 public class Demo02 {
    //识别属性的方法!
    15 public static void printNode(Node node){ 16 NamedNodeMap nodemap=node.getAttributes(); 17 for(int i=0;i<nodemap.getLength();i++){ 18 Node e=nodemap.item(i); 19 System.out.println(e.getNodeName()+" : "+e.getFirstChild().getNodeValue()); 20 } 21 22 } 23 public static void main(String[] args) { 24 DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance(); 25 try { 26 DocumentBuilder builder= factory.newDocumentBuilder(); 27 Document doc=builder.parse("src/students.xml"); 28 NodeList nodelist=doc.getElementsByTagName("students"); 29 Element element=(Element)nodelist.item(0); 30 NodeList nodelists =element.getElementsByTagName("student"); 31 for(int i=0;i<nodelists.getLength();i++){ 32 Element e=(Element)nodelists.item(i); 33 System.out.println("姓名: "+e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); 34 printNode(e.getElementsByTagName("name").item(0)); 35 System.out.println("年龄: "+e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue()); 36 System.out.println("性别: "+e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue()); 37 System.out.println("==============================================="); 38 } 39 } catch (Exception e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 44 } 45 }

    OK了!

  • 相关阅读:
    Linux动态链接(4)ldd与ldconfig
    Linux动态链接(3)so文件映射地址
    Linux动态链接(2)so初始化执行
    Linux动态链接(1)惰性链接
    kill信号由谁接收处理
    gdb调试器之"测不准原则"
    gdb动态库延迟断点及线程/进程创建相关事件处理(下)
    gdb动态库延迟断点及线程/进程创建相关事件处理(上)
    Redis集群,备份,哨兵机制
    hyper-v虚拟机centos7网络配置
  • 原文地址:https://www.cnblogs.com/zyxsblogs/p/10108616.html
Copyright © 2020-2023  润新知