package com.licheng.www;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class SaxDemo1 {
/**
* @param args
* @throws SAXException
* @throws ParserConfigurationException
*/
public static void main(String[] args) throws Exception {
// 1,获取解析器工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
// 2,通过工厂获取Sax解析器
SAXParser parser = factory.newSAXParser();
// 3,获取读取器
XMLReader reader = parser.getXMLReader();
// 注册事件处理器
reader.setContentHandler(new MyContentHandler2());
// 5,解析XML
reader.parse("1.xml");
}
}
// 适配器设计模式
class MyContentHandler2 extends DefaultHandler {
private String eleName;
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
this.eleName = name;
}
public void characters(char[] ch, int start, int length)
throws SAXException {
if ("海淀".equals(eleName)) {
System.out.println(new String(ch, start, length));
}
}
public void endElement(String uri, String localName, String name)
throws SAXException {
eleName = null;
}
}
class MyContentHandler implements ContentHandler {
public void startDocument() throws SAXException {
System.out.println("文档解析开始了");
}
public void startElement(String uri, String localName, String name,
Attributes atts) throws SAXException {
System.out.println("发现了开始标签" + name);
}
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch, start, length));
}
public void endElement(String uri, String localName, String name)
throws SAXException {
System.out.println("发现了结束标签" + name);
}
public void endDocument() throws SAXException {
System.out.println("文档解析结束了");
}
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub
}
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub
}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub
}
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub
}
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
}
public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub
}
}
1.xml
<?xml version="1.0" encoding="utf-8" ?>
<中国>
<北京>
<海淀> > < </海淀>
<丰台></丰台>
</北京>
</中国>
<!--
aa a ad
-->
Dom4j Dom 解析
package com.licheng.dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jTest {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// 获取解析器
SAXReader reader = new SAXReader();
// 解析xml获取代表整个文档的 dom对象
Document dom = reader.read("1.xml");
// 获取根节点
Element root = dom.getRootElement();
//获取
String cityName=root.element("北京").element("海淀").getText();
System.out.println(cityName);
}
}
package com.licheng.dom4j;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4jTest2 {
public static void find() throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read("1.xml");
Element root = dom.getRootElement();
List list = root.elements();
Element city = (Element) list.get(0);
System.out.println(city.element("海淀").getText());
}
public static void add() throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read("1.xml");
Element root = dom.getRootElement();
// 创建节点
Element cityEle = DocumentHelper.createElement("东城");
cityEle.setText("哈哈");
// 挂载
Element city = root.element("北京");
city.add(cityEle);
// 将内存中的dom树回写到xml文件中,从而使xml中的数据更新
// FileWriter writer=new FileWriter("1.xml");
// dom.write(writer);
// writer.flush();
// writer.close();
XMLWriter writer = new XMLWriter(new FileOutputStream("1.xml"),
OutputFormat.createCompactFormat());
writer.write(dom);
writer.close();
}
public static void update() throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read("1.xml");
Element root = dom.getRootElement();
root.element("北京").element("海淀").setText("1111");
XMLWriter writer = new XMLWriter(new FileOutputStream("1.xml"),
OutputFormat.createCompactFormat());
writer.write(dom);
writer.close();
}
public static void del() throws Exception {
SAXReader reader = new SAXReader();
Document dom = reader.read("1.xml");
Element root = dom.getRootElement();
Element city=root.element("北京").element("东城");
city.getParent().remove(city);
XMLWriter writer = new XMLWriter(new FileOutputStream("1.xml"),
OutputFormat.createCompactFormat());
writer.write(dom);
writer.close();
}
public static void main(String[] args) {
try {
find();
add();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//city.addAttribute(arg0, arg1) 添加属性
//city.attribute(arg0) 获取属性
}