各种方法都用过。现在总结一下。 经常记不住,要找资料。现在总结一下。
xml 文件如下:
<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>
<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>
</bookstore>
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
public class D {
 /**
  * 使用SAX解析
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
  SAXParserFactory factory = SAXParserFactoryImpl.newInstance();
  SAXParser parser = factory.newSAXParser() ;
  parser.parse(D.class.getClassLoader().getResourceAsStream("NewFile.xml"), 
    new DefaultHandler(){
     @Override
     public void characters(char[] ch, int start, int length)
       throws SAXException {
      System.out.println("characters");
     }
     @Override
     public void endDocument() throws SAXException {
      // TODO Auto-generated method stub
      System.out.println("endDocument");
     }
     @Override
     public void endElement(String uri, String localName,
       String qName) throws SAXException {
      // TODO Auto-generated method stub
      System.out.println("endElement");
     }
     @Override
     public void startDocument() throws SAXException {
      // TODO Auto-generated method stub
      System.out.println("startDocument");
     }
     @Override
     public void startElement(String uri, String localName,
       String qName, Attributes attributes)
       throws SAXException {
      // TODO Auto-generated method stub
      System.out.println("startElement");
     }
  }) ;
  
 }
}
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
public class D3 {
 /**
  * 使用XMLStream解析
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
XMLInputFactory xmlFactor = XMLInputFactory.newFactory();
  XMLStreamReader reader = 
   xmlFactor.createXMLStreamReader(D3.class.getClassLoader().getResourceAsStream("NewFile.xml"));
  while(reader.hasNext()){
   int point = reader.next() ;
   switch(point){
   case XMLStreamReader.START_ELEMENT :
    System.out.println("start_element");
   case XMLStreamReader.END_ELEMENT :
    // do something...
   }
}
}
}
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
/**
 * 使用DOM4j XPATH解析XML (需要加入依赖jar文件)
 * @author zhoufeng
 *
 */
public class D4 {
 public static void main(String[] args) throws Exception{
  SAXReader reader = new SAXReader() ;
  Document root = reader.read(D4.class.getClassLoader().getResourceAsStream("NewFile.xml"));
  /* 选择所有的cc节点 */
  System.out.println(root.selectNodes("//cc").size());;
  /*选择所有的book节点,并且有子节点author的*/
  System.out.println((root.selectNodes("//book[author]").size()));;
  /* 选择所有book节点,并且有属性category的   */
  System.out.println((root.selectNodes("//book[@category]").size()));;
  /* 选择所有book节点,并且有子节点author值为James McGovern ,并且还有category属性节点值为WEB   下面的price节点*/
  System.out.println(root.selectNodes("//book[author='James McGovern'][@category='WEB']/price").size());;
 }
}