有一个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 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 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,Attributes attributes) throws SAXException {
- currentTag = qName;
- if("作者".equals(currentTag)){
- currentNum++;
- }
- }
- @Override
- public void endElement(String uri,String qName)
- throws SAXException {
- currentTag = null;
- }
- @Override
- public void characters(char[] ch,int length)
- throws SAXException {
- if("作者".equals(currentTag) && currentNum==needNum){
- System.out.println(new String(ch,length));
- }
- }
- }