0 Comments

利用DOM解析XML文档实例(2)

发布于:2013-12-10  |   作者:广州网站建设  |   已聚集:人围观

使用DOM解析XML文档

我们现在来看看DOM是如何解析XML的吧!同样的,我将从一个简单的不能再简单的例子来说明DOM是如何解析XML文档的,先让我们看看XML是什么内容吧:

1.先建立一个configure.xml;存放在src包下的xml包下。


  1. <?xml version="1.0" encoding="gbk"?>   
  2. <books>   
  3. <book email="zhoujunhui">   
  4. <name>rjzjh</name>   
  5. <price>jjjjjj</price>   
  6. </book>   
  7. </books>  

2.建立解析程序,DomParse.java,存放在src下的ttg包下。


  1. package ttg;   
  2.  
  3. import java.io.FileInputStream;   
  4. import java.io.FileNotFoundException;   
  5. import java.io.IOException;   
  6. import java.io.InputStream;   
  7.  
  8. import javax.xml.parsers.DocumentBuilder;   
  9. import javax.xml.parsers.DocumentBuilderFactory;   
  10. import javax.xml.parsers.ParserConfigurationException;   
  11.  
  12. import org.w3c.dom.Document;   
  13. import org.w3c.dom.Element;   
  14. import org.w3c.dom.Node;   
  15. import org.w3c.dom.NodeList;   
  16. import org.xml.sax.SAXException;   
  17.  
  18. public class DomParse {   
  19. public DomParse() {   
  20.  
  21. //得到DOM解析器的工厂实例   
  22. //javax.xml.parsers.DocumentBuilderFactory类的实例就是我们要的解析器工厂   
  23.  
  24. DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();   
  25. try {   
  26.  
  27. //通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器   
  28. DocumentBuilder dombuilder = domfac.newDocumentBuilder();   
  29.  
  30. //把要解析的XML文档转化为输入流,以便DOM解析器解析它   
  31. InputStream is = new FileInputStream("src/xml/configure.xml");   
  32.  
  33. //解析XML文档的输入流,得到一个Document   
  34. //由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的   
  35. Document doc = dombuilder.parse(is);   
  36.  
  37. //得到XML文档的根节点   
  38. //在DOM中只有根节点是一个org.w3c.dom.Element对象。   
  39. Element root = doc.getDocumentElement();   
  40.  
  41. //得到节点的子节点   
  42. //这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的,还有一种轮循子节点的方法   
  43. NodeList books = root.getChildNodes();   
  44. if (books != null) {   
  45. for (int i = 0; i < books.getLength(); i++) {   
  46. Node book = books.item(i);   
  47. if (book.getNodeType() == Node.ELEMENT_NODE) {   
  48.  
  49. //取得节点的属性值   
  50. //注意,节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE   
  51. String email = book.getAttributes().getNamedItem("email").getNodeValue();   
  52. System.out.println(email);   
  53.  
  54. //轮循子节点   
  55. for (Node node = book.getFirstChild(); node != null; nodenode = node.getNextSibling())   
  56. {   
  57. if (node.getNodeType() == Node.ELEMENT_NODE) {   
  58. if (node.getNodeName().equals("name")) {   
  59. String name = node.getNodeValue();   
  60. String name1 = node.getFirstChild()   
  61. .getNodeValue();   
  62. System.out.println(name);   
  63. System.out.println(name1);   
  64. }   
  65. if (node.getNodeName().equals("price")) {   
  66. String price = node.getFirstChild()   
  67. .getNodeValue();   
  68. System.out.println(price);   
  69. }   
  70. }   
  71. }   
  72. }   
  73. }   
  74. }   
  75. } catch (ParserConfigurationException e) {   
  76. e.printStackTrace();   
  77. } catch (FileNotFoundException e) {   
  78. e.printStackTrace();   
  79. } catch (SAXException e) {   
  80. e.printStackTrace();   
  81. } catch (IOException e) {   
  82. e.printStackTrace();   
  83. }   
  84. }   
  85.  
  86. public static void main(String[] args) {   
  87. DomParse domp=new DomParse();   
  88. }   
  89. }  

 

标签:
飞机