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);
}
}