zoukankan      html  css  js  c++  java
  • 递归方式 DOM 解析(parse) XML

    friends.xml

    [html] view plain copy
     
    1. <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>  
    2.   
    3.   
    4. <friends date="2012">  
    5.       
    6.  <!--此处为注释-->  
    7.   
    8.     <friend id="1">  
    9.   
    10.         <姓名>小红</姓名>  
    11.         <QQ>123456789</QQ>  
    12.   
    13.     </friend>  
    14.   
    15.  <friend>  
    16.   
    17.         <姓名>小平</姓名>  
    18.         <QQ>12345678</QQ>  
    19.   
    20.  </friend>  
    21.   
    22.  <friend>  
    23.   
    24.         <姓名 mark="hello">小敏</姓名>  
    25.         <QQ>1234567</QQ>  
    26.   
    27.  </friend>  
    28.   
    29.  <friend>  
    30.   
    31.         <姓名>小良</姓名>  
    32.         <QQ>987654321</QQ>  
    33.   
    34.  </friend>  
    35.   
    36.  <friend>  
    37.   
    38.         <姓名>小健</姓名>  
    39.         <QQ>98765432</QQ>  
    40.   
    41.  </friend>   
    42.   
    43. </friends>  
    44.   
    45. </span>  

    DOM   parse   XML

    [java] view plain copy
     
    1. <span style="font-size:16px;">import java.io.File ;  
    2.   
    3. import javax.xml.parsers.DocumentBuilderFactory ;  
    4. import javax.xml.parsers.DocumentBuilder ;  
    5.   
    6. import org.w3c.dom.Element ;  
    7. import org.w3c.dom.Document ;  
    8. import org.w3c.dom.NamedNodeMap ;  
    9. import org.w3c.dom.NodeList ;  
    10. import org.w3c.dom.Attr ;  
    11. import org.w3c.dom.Node ;  
    12. import org.w3c.dom.Comment ;  
    13.   
    14. //利用 递归 dom 解析任何xml文档,把xml文档加载到内存,占用内存大,可随机访问  
    15.   
    16. public class RecursionDOM_XML  
    17. {  
    18.     public static void main(String[] args) throws Exception  
    19.     {  
    20.         //1.获取dom解析器工厂  
    21.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance() ;  
    22.           
    23.         //2.获取具体的dom解析器  
    24.         DocumentBuilder db = dbf.newDocumentBuilder() ;  
    25.           
    26.         //获取xml文档的 根节点  
    27.         Document document = db.parse(new File("friends.xml") );  
    28.           
    29.         //获取文档的 根元素节点  
    30.         Element e = document.getDocumentElement() ;  
    31.   
    32.         parseXML(e) ;  
    33.   
    34.     }  
    35.   
    36.     public static void parseXML(Element element)  
    37.     {  
    38.         //获取 元素节点 的 信息  
    39.         String name = element.getNodeName() ;  
    40.         System.out.print("< " + name) ;  
    41.           
    42.         //获取此元素节点的属性  
    43.         NamedNodeMap map = element.getAttributes() ;  
    44.           
    45.         //获取目前element元素节点下的 孩子节点(包括空格)</span>  
    [java] view plain copy
     
    1. <span style="font-size:16px;">      NodeList child = element.getChildNodes() ;  
    2.   
    3.         if (null != map)  
    4.         {  
    5.             for (int i = 0; i < map.getLength(); i++ )  
    6.             {  
    7.                 Attr attr = (Attr)map.item(i) ;  
    8.   
    9.                 String name1 = attr.getName() ;  
    10.                 String value1 = attr.getValue() ;  
    11.                 System.out.print(" " + name1 +"="" + value1 +""") ;  
    12.             }  
    13.   
    14.         }  
    15.   
    16.         System.out.print(" >") ;  
    17.   
    18.         for (int j = 0; j < child.getLength() ;j++ )  
    19.         {  
    20.             Node node = child.item(j) ;  
    21.               
    22.             //判断该节点是不是 元素节点  ,递归路口  
    23.             if (node.getNodeType() == Node.ELEMENT_NODE)  
    24.             {  
    25.                 //开始递归  
    26.                 parseXML((Element)node) ;  
    27.             }  
    28.               
    29.             //判断该节点是不是 文本,递归出口  
    30.             else if (node.getNodeType() == Node.TEXT_NODE)  
    31.             {  
    32.                 System.out.print(node.getNodeValue() + "") ;  
    33.   
    34.             }  
    35.   
    36.             //判断该节点是不是 注释  
    37.             else if (node.getNodeType() == Node.COMMENT_NODE)  
    38.             {  
    39.                 System.out.print("<!--");  
    40.                 Comment comment = (Comment)node ;  
    41.                 //注释内容  
    42.                 String data = comment.getData() ;  
    43.                   
    44.                 System.out.print(data);  
    45.                 System.out.print("-->");  
    46.   
    47.             }  
    48.         }  
    49.   
    50.         System.out.println("</" + name + ">" ) ;  
    51.   
    52.   
    53.     }  
    54.   
    55.   
    56. }</span>  
  • 相关阅读:
    HDU X mod f(x)(题解注释)
    hdu 3555 Bomb(不要49,数位DP)
    hdu 2089 不要62(入门数位dp)
    暑假练习赛 003 B Chris and Road
    暑假练习赛 003 F Mishka and trip
    暑假练习赛 003 A Spider Man
    linux:关于Linux系统中 CPU Memory IO Network的性能监测
    linux TCP数据包重传过程----小结
    linux TCP头部的构造的简单分析
    linux TCP数据包封装在SKB的过程分析
  • 原文地址:https://www.cnblogs.com/hoobey/p/5294309.html
Copyright © 2011-2022 走看看