xml 四种解析方法



package snack.server;
import java.io.File;
import java.util.Iterator;
import java.util.List;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParserFactory;


import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*; 
import org.w3c.dom.*;
import org.w3c.dom.Document;
import org.jdom.input.SAXBuilder;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class xmlTest extends DefaultHandler{
public static void main(String[] args)  throws Exception {

//-----------------------------------求路径

long time=System.currentTimeMillis();
File f=new File("E:\\Maven1222\\snack\\snack.server\\src\\test\\java\\myTest.xml");


//--------------------------------        DOM   解析   --------------------------------
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//可得到DOM 解析器的工厂实例
DocumentBuilder db=dbf.newDocumentBuilder();
Document document=db.parse(f);
NodeList list=document.getElementsByTagName("result");
for(int i=0;i<list.getLength();i++){
System.out.println("车牌:"+document.getElementsByTagName("no").item(i).getLastChild().getNodeValue());
System.out.println("地址:"+document.getElementsByTagName("addr").item(i).getFirstChild().getNodeValue());
}



//------------------------------- SAX 解析 -------------------------------------
SAXParserFactory sf = SAXParserFactory.newInstance(); //此方法需要重写父类的方法 ,如 下面四个
SAXParser sp = sf.newSAXParser(); //执行顺序  如下
xmlTest reader = new xmlTest(); // startDocument-->startElement-->characters-->endElement-->endDocument
sp.parse(f, reader); //需要继承 DefaultHandler 
System.out.println("运行时间:"+(System.currentTimeMillis()-time)+"毫秒");

//----------------------------- JDOM -------------------------------------------
SAXBuilder saxb=new SAXBuilder();
org.jdom.Document doc=saxb.build(f);
org.jdom.Element foo=doc.getRootElement();
List ll=foo.getChildren();
for(int i=0;i<ll.size();i++){
System.out.print("车牌号码:" +document.getElementsByTagName("no").item(i).getLastChild().getNodeValue()); 
System.out.println("地址:"+document.getElementsByTagName("addr").item(i).getFirstChild().getNodeValue());
}

//----------------------------- DOM4J  --------------------------------------完美主义者
SAXReader saxr=new SAXReader();
org.dom4j.Document docu=saxr.read(f);
org.dom4j.Element ele=docu.getRootElement();
Iterator item= ele.elementIterator("value");
while(item.hasNext()){
Element fo = (Element) item.next(); 
System.out.print("车牌号码:" +fo.elementText("no")); 
System.out.println("车主地址:" + fo.elementText("addr")); 
}


}
/* 此方法有三个参数 
    arg0是传回来的字符数组,其包含元素内容 
    arg1和arg2分别是数组的开始位置和结束位置 */ 
@Override 
    public void characters(char[] arg0, int arg1, int arg2) throws SAXException { 
        String content = new String(arg0, arg1, arg2); 
        System.out.println(content); 
        super.characters(arg0, arg1, arg2); 
    }
 @Override 
   public void endDocument() throws SAXException { 
       System.out.println("\n…………结束解析文档…………"); 
       super.endDocument(); 
   } 
 /* arg0是名称空间 
      arg1是包含名称空间的标签,如果没有名称空间,则为空 
      arg2是不包含名称空间的标签 */ 
   @Override 
   public void endElement(String arg0, String arg1, String arg2) 
           throws SAXException { 
       System.out.println("结束解析元素  " + arg2); 
       super.endElement(arg0, arg1, arg2); 
   } 
   @Override 
   public void startDocument() throws SAXException { 
       System.out.println("…………开始解析文档…………\n"); 
       super.startDocument(); 
   } 
   /*arg0是名称空间 
   arg1是包含名称空间的标签,如果没有名称空间,则为空 
   arg2是不包含名称空间的标签 
   arg3很明显是属性的集合 */
 @Override
 public void startElement(String arg0, String arg1, String arg2, 
         Attributes arg3) throws SAXException { 
     System.out.println("开始解析元素 " + arg2); 
     if (arg3 != null) { 
         for (int i = 0; i < arg3.getLength(); i++) { 
              // getQName()是获取属性名称, 
             System.out.print(arg3.getQName(i) + "=\"" + arg3.getValue(i) + "\""); 
         } 
     } 
     System.out.print(arg2 + ":"); 
     super.startElement(arg0, arg1, arg2, arg3); 
 } 
}

你可能感兴趣的:(xml,解析)