DOM解析XML文件

    技术2022-05-11  32

    DOM 解析 XML 文件 (2006-11-25) 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。      JAXP接口包含了三个包:      (1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。      (2)org.xml.sax  用于对XML进行语法分析的事件驱动的XML简单API(SAX)      (3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。       二、前提      DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。       三、使用 DOM 解析XML 文档      我们现在来看看DOM是如何解析XML的吧!同样的,我将从一个简单的不能再简单的例子来说明DOM是如何解析XML文档的,先让我们看看XML是什么内容吧:      <?xml version="1.0" encoding="gb2312"?>      <books>      <book email="dudeng163@com">      <name>zhuzhu</name>      <price>zhu</price>      </book>      </books>      简单的不能再简单了。但是该有的都有了,根元素、属性、子节点。好了,能反应问题就行了,下面来看看解析这个XML文件的Java代码吧!   package com.dudeng.xml.test;   import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream;   import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException;   import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;   public class DomParse {     public DomParse()     {        // 得到 DOM 解析器的工厂实例        DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();        try        {            // DOM 工厂获得 DOM 解析器            DocumentBuilder dombuilder = domfac.newDocumentBuilder();                       // 把要解析的 XML 文档转化为输入流,以便 DOM 解析器解析它            InputStream is = new FileInputStream( "NewFile.xml" );                       // 解析 XML 文档的输入流,得到一个 Document            Document doc = dombuilder.parse(is);              // 得到 XML 文档的根节点            Element root = doc.getDocumentElement();              // 得到节点的子节点            NodeList books = root.getChildNodes();              if (books != null )            {               for ( int i = 0; i < books.getLength(); i++)               {                   Node book = books.item(i);                     if (book.getNodeType() == Node. ELEMENT_NODE )                   {                      // 取得节点的属性值                      String email = book.getAttributes().getNamedItem(                             "email" ).getNodeValue();                        System. out .println(email);                                           // 轮循子节点                      for (Node node = book.getFirstChild(); node != null ; node = node                             .getNextSibling())                      {                          if (node.getNodeType() == Node. ELEMENT_NODE )                          {                             if (node.getNodeName().equals( "name" ))                             {                                 String name = node.getNodeValue();                                 String name1 = node.getFirstChild()                                        .getNodeValue();                                 System. out .println(name);                                 System. out .println(name1);                             }                             if (node.getNodeName().equals( "price" ))                             {                                 String price = node.getFirstChild()                                        .getNodeValue();                                 System. out .println(price);                             }                          }                      }                   }               }            }        } catch (ParserConfigurationException e)        {            e.printStackTrace();        } catch (FileNotFoundException e)        {            e.printStackTrace();        } catch (SAXException e)        {            e.printStackTrace();        } catch (IOException e)        {            e.printStackTrace();        }     }       public static void main(String[] args)     {        new DomParse();     } }  

    最新回复(0)