SAX解析操作
程序员文章站
2022-05-28 08:31:43
...
SAX解析操作
如果要想使用SAX解析,首先需要编写一个SAX解析器,并且定义一个类,并使该类继承DefaultHandler类,同时覆写startDocument(),startElement(),endElement()和characters()方法
建立完SAX解析器之后,还需要建立SAXParserFactory和SAXParser两个类,可以通过SAXParserFactory的newSAXParser()方法创建SAXParser对象,之后通过SAXParser的parse()方法指定要解析的XML文件和制定的SAX解析器
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = factory. newSAXParser();
saxParser.parse(inputSource, new CustomizeSaxHandle());
其中,inputSource是要解析的文件,文件路径或文件输入流均可;new CustomizeSaxHandle()为新建的自定义sax解析器
public class CustomizeSaxHandle extends DefaultHandler {
private Locator locator;
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(JSON.toJSONString(locator));
System.out.print("<");
System.out.print(qName);
if (attributes != null) {
for (int x = 0; x < attributes.getLength(); x++) {
System.out.print("" + attributes.getQName(x) + "=\"" + attributes.getValue(x) + "\"");
}
}
System.out.println(">");
}
@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 setDocumentLocator(Locator locator) {
this.locator = locator;
}
}
其中,startElement()方法中的qName指的是节点名称,attributes指的是标签中配置的属性值;而characters()方法中的ch指的是要解析的xml文件中的所有字符的字节数组,start和length组合使用可以截取每个标签对应的具体值;解析器中定义Locator locator;可以获取每个节点的位置
上一篇: java利用SAX解析XML
下一篇: SAX解析XML文档