DOM与SAX读取xml文件例程

以如下xml为例

 <books> 
   <book id="001"> 
      <title>Harry Potter</title> 
      <author>afd</author> 
   </book> 
   <book id="002"> 
      <title>Learning XML</title> 
      <author>daf</author> 
   </book> 
 </books> 

Dom4j读取信息源程序

import java.io.File; 
 import java.io.IOException; 
 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 DOMParser { 
   DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
   //Load and parse XML file into DOM 
   public Document parse(String filePath) { 
      Document document = null; 
      try { 
         //DOM parser instance 
         DocumentBuilder builder = builderFactory.newDocumentBuilder(); 
         //parse an XML file into a DOM tree 
         document = builder.parse(new File(filePath)); 
      } catch (ParserConfigurationException e) { 
         e.printStackTrace();  
      } catch (SAXException e) { 
         e.printStackTrace(); 
      } catch (IOException e) { 
         e.printStackTrace(); 
      } 
      return document; 
   } 
    
   public static void main(String[] args) { 
         DOMParser parser = new DOMParser(); 
         Document document = parser.parse("books.xml"); 
         //get root element 
         Element rootElement = document.getDocumentElement(); 

         //traverse child elements 
         NodeList nodes = rootElement.getChildNodes(); 
         for (int i=0; i < nodes.getLength(); i++) 
         { 
            Node node = nodes.item(i); 
            if (node.getNodeType() == Node.ELEMENT_NODE) {   
               Element child = (Element) node; 
               //process child element 
              System.out.println( child.getAttribute("id"));              
             Node eleTitle = child.getElementsByTagName("title").item(0);
             Node eleAuthor = child.getElementsByTagName("author").item(0);
             String title = eleTitle.getFirstChild().getNodeValue();
             String author = eleAuthor.getFirstChild().getNodeValue();
             System.out.println(title  + "---" + author);
            } 
         }       
   } 
 } 

显示结果

001
Harry Potter---afd
002
Learning XML---daf

 

 

SAX方法例程

 import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes; 
 import org.xml.sax.SAXException; 
 import org.xml.sax.XMLReader; 
 import org.xml.sax.helpers.DefaultHandler; 
import org.xml.sax.helpers.XMLReaderFactory; 

 public class SAXParser { 

   class BookHandler extends DefaultHandler { 
      private List<String> nameList; 
      private boolean title = false; 
   
      public List<String> getNameList() { 
         return nameList; 
      } 
      // Called at start of an XML document 
      @Override 
      public void startDocument() throws SAXException { 
         System.out.println("Start parsing document..."); 
         nameList = new ArrayList<String>(); 
      } 
      // Called at end of an XML document 
      @Override 
      public void endDocument() throws SAXException {  
         System.out.println("End");  
      } 
      
      /** 
       * Start processing of an element. 
       * @param namespaceURI  Namespace URI 
       * @param localName  The local name, without prefix 
       * @param qName  The qualified name, with prefix 
       * @param atts  The attributes of the element 
       */ 
      @Override 
      public void startElement(String uri, String localName, String qName, 
         Attributes atts) throws SAXException { 
         // Using qualified name because we are not using xmlns prefixes here. 
         if (qName.equals("title")) { 
            title = true; 
         } 
      } 
   
      @Override 
      public void endElement(String namespaceURI, String localName, String qName) 
         throws SAXException { 
         // End of processing current element 
         if (title) { 
            title = false; 
         } 
      } 
               
      @Override 
      public void characters(char[] ch, int start, int length) { 
         // Processing character data inside an element 
         if (title) { 
            String bookTitle = new String(ch, start, length); 
            System.out.println("Book title: " + bookTitle); 
            nameList.add(bookTitle); 
         }
      }             
   } 
    
   public static void main(String[] args) throws SAXException, IOException { 
      XMLReader parser = XMLReaderFactory.createXMLReader(); 
      BookHandler bookHandler = (new SAXParser()).new BookHandler(); 
      parser.setContentHandler(bookHandler); 
      parser.parse("books.xml"); 
      System.out.println(bookHandler.getNameList()); 
   } 
 } 
    

 

posted @ 2012-09-13 23:47  vigarbuaa  阅读(283)  评论(0编辑  收藏  举报