首页 > 代码库 > javaweb学习总结十二(JAXP对XML文档进行SAX解析)
javaweb学习总结十二(JAXP对XML文档进行SAX解析)
一:JAXP使用SAX方式解析XML文件
1:dom解析与sax解析异同点
2:sax解析特点
二:代码案例
1:xml文件
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <students> 3 <student> 4 <name sid="111">李四</name> 5 <age>23</age> 6 <gender>男</gender> 7 </student> 8 <student> 9 <name sid="222">张三</name>10 <age>21</age>11 <gender>女</gender>12 </student>13 </students>
2:测试主体部分
1 @Test 2 public void testParseXml() throws ParserConfigurationException, 3 SAXException, IOException { 4 // 1:获取解析器工厂 5 SAXParserFactory factory = SAXParserFactory.newInstance(); 6 // 2:获取解析器 7 SAXParser parser = factory.newSAXParser(); 8 // 3:获取读取器 9 XMLReader reader = parser.getXMLReader();10 // 4:设置内容格式11 reader.setContentHandler(new GetSecondNameHandler());12 // 5:解析文件13 reader.parse("xml/exam.xml");14 }
a:获取整个xml文档标签的处理事件
1 // 定义一个解析全文的解析器 2 class MyHandler implements ContentHandler { 3 4 @Override 5 public void setDocumentLocator(Locator locator) { 6 7 } 8 9 @Override10 public void startDocument() throws SAXException {11 12 }13 14 @Override15 public void endDocument() throws SAXException {16 17 }18 19 @Override20 public void startPrefixMapping(String prefix, String uri)21 throws SAXException {22 23 }24 25 @Override26 public void endPrefixMapping(String prefix) throws SAXException {27 28 }29 30 @Override31 public void startElement(String uri, String localName, String qName,32 Attributes atts) throws SAXException {33 System.out.println("<" + qName + ">");34 // 获取元素的属性35 for (int i = 0; i < atts.getLength(); i++) {36 String attrName = atts.getQName(i);37 String attrValue =http://www.mamicode.com/ atts.getValue(i);38 System.out.println(attrName + "=" + attrValue);39 }40 }41 42 @Override43 public void endElement(String uri, String localName, String qName)44 throws SAXException {45 System.out.println("<" + qName + "/>");46 }47 48 @Override49 public void characters(char[] ch, int start, int length)50 throws SAXException {51 System.out.println(new String(ch, start, length));52 }53 54 @Override55 public void ignorableWhitespace(char[] ch, int start, int length)56 throws SAXException {57 58 }59 60 @Override61 public void processingInstruction(String target, String data)62 throws SAXException {63 64 }65 66 @Override67 public void skippedEntity(String name) throws SAXException {68 69 }70 71 }
b:定义“获取指定内容,获取第二个学生的名字”事件
1 class GetSecondNameHandler extends DefaultHandler { 2 3 private String contentTag; 4 private int currentTag = 0; 5 private int getTag = 2; 6 7 @Override 8 public void startElement(String uri, String localName, String qName, 9 Attributes attributes) throws SAXException {10 contentTag = qName;11 }12 13 @Override14 public void endElement(String uri, String localName, String qName)15 throws SAXException {16 contentTag = null;17 }18 19 @Override20 public void characters(char[] ch, int start, int length)21 throws SAXException {22 if ("name".equals(contentTag)) {23 currentTag++;24 if (currentTag == getTag) {25 System.out.println(new String(ch, start, length));26 }27 28 }29 }30 31 }
class GetSecondNameHandler extends DefaultHandler {
private String contentTag;private int currentTag = 0;private int getTag = 2;
@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {contentTag = qName;}
@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {contentTag = null;}
@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if ("name".equals(contentTag)) {currentTag++;if (currentTag == getTag) {System.out.println(new String(ch, start, length));}}}
}
javaweb学习总结十二(JAXP对XML文档进行SAX解析)