递归方式 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>  
原文地址:https://www.cnblogs.com/hoobey/p/5294309.html