转载自:http://blog.csdn.net/maniacer/article/details/51156322
本文整理了XML解析的两种方式,分别是SAX解析和DOM解析
SAX解析是按照XML的标签顺序一步步的解析,首先加载document,然后按照顺序加载Element,在加载时我们可以设置监听事件,当加载document或者element时执行某些操作,直接上代码。
这里采用eclipse开发,XML文件放在project根目录下。
book.xml
<书架>
<书>
<书名>Java编程思想书名>
<作者>张孝祥作者>
<售价>售价>
书>
<书>
<书名>HTML5+CSS书名>
<作者>张孝祥作者>
<售价>108.8售价>
书>
书架>
SaxDemo.java
public class SaxDome {
public static (String[] args) throws Exception {
//加载解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//通过工厂获取SAX解析器
SAXParser sax = factory.newSAXParser();
//获取读取器
XMLReader reader = sax.getXMLReader();
//注册事件处理器
reader.setContentHandler( MyContentHandler());
//解析XML
reader.parse("country.xml");
}
}
class MyContentHandler extends DefaultHandler {
@Override
public startDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("文档开始");
}
@Override
public startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
System.out.println(qName + "标签开始");
}
@Override
public characters([] ch, start, length) throws SAXException {
// TODO Auto-generated method stub
System.out.println( String(ch,start,length));
}
@Override
public endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
System.out.println(qName + "标签结束");
}
@Override
public endDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("文档结束");
}
}
1、优点:不需要等待整个XML加载到内存,当解析到某一部分时自动触发对应的方法去处理,效率比较高。理论上不论多大的XML文件都可以解读。
2、缺点:每次将诶西都只能处理一次,下次解析还要重新解析。
Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件。
只接上代码,需要的朋友可以直接拷贝
查询:
@Test
public query() throws Exception{
SAXReader reader = SAXReader();
Document dom = reader.read("country.xml");
Element root = dom.getRootElement();
List list = root.elements();
Element book2 = list.get();
String book2Name = book2.element().getText();
System.out.println(book2Name);
}
增加:
@Test
public () throws Exception{
SAXReader reader = SAXReader();
Document dom = reader.read("country.xml");
Element root = dom.getRootElement();
Element book = root.element();
Element price = DocumentHelper.createElement();
price.setText();
book.add(price);
XMLWriter writer = XMLWriter( FileOutputStream("country.xml"), OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}
修改:
@Test
public update() throws Exception{
SAXReader reader = SAXReader();
Document dom = reader.read("country.xml");
Element root = dom.getRootElement();
Element price = root.element().element();
price.setText("4.0元");
XMLWriter writer = XMLWriter( FileOutputStream("country.xml"), OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}
删除:
@Test
public remove() throws Exception{
SAXReader reader = SAXReader();
Document dom = reader.read("country.xml");
Element root = dom.getRootElement();
Element price = root.element().element();
price.getParent().remove(price);
XMLWriter writer = XMLWriter( FileOutputStream("country.xml"), OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}