有一个xml文档
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
<书>
<书名 name="xxxx">java web</书名>
<作者>张大</作者>
<价格>102</价格>
</书>
<书>
<书名>spring</书名>
<作者>呜呜</作者>
<价格>55</价格>
</书>
</书架>
解析所有节点
package cn.itcast.sax;
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;
public class Demo1 {
public static void main(String[] args) throws Exception {
//1.创建工厂
SAXParserFactory saxP = SAXParserFactory.newInstance();
//2.得到解析器
SAXParser parser = saxP.newSAXParser();
//3.得到读取器
XMLReader xmlR = parser.getXMLReader();
//4.设置内容处理器
xmlR.setContentHandler(new ParseS());
//5.读取xml内容
xmlR.parse("src/book.xml");
}
}
//得到xml文档的内容
class ParseS implements ContentHandler{
@Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
System.out.println("<"+qName+">");
for(int i=0; i<atts.getLength(); i++){
String name = atts.getQName(i);
String value = atts.getValue(i);
System.out.println(name+": "+value);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("</"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch,start,length));
}
@Override
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub
}
}
获取指定标签的值
package cn.itcast.sax;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class Demo2 {
public static void main(String[] args) throws Exception{
//1.创建工厂
SAXParserFactory saxP = SAXParserFactory.newInstance();
//2.得到解析器
SAXParser parser = saxP.newSAXParser();
//3.得到读取器
XMLReader xmlR = parser.getXMLReader();
//4.设置内容处理器
xmlR.setContentHandler(new TagHandler());
//5.读取xml内容
xmlR.parse("src/book.xml");
}
}
//获取指定标签的值
class TagHandler extends DefaultHandler{
private String currentTag; //记录当前解析到的标签
private int needNum = 2; //记录想获取第几个标签
private int currentNum;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentTag = qName;
if("作者".equals(currentTag)){
currentNum++;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentTag = null;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if("作者".equals(currentTag) && currentNum==needNum){
System.out.println(new String(ch,start,length));
}
}
}