我使用SAX解析XML&从中获取元素数量。
在XML中,存在<item>
个标签次数(很容易> 50)。但是我只想在20年前拿到它。
调用XMLHanlder的代码:
XMLHandler handler = new XMLHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(in));
XMLHandler代码:
public class XMLHanlder extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
...
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
...
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
...
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
...
}
}
是否有任何方法startElement()/endElement()
不会被调用超过20次。
如果没有,是否有任何解决方法?
由于
答案 0 :(得分:3)
SAX
不提供任何此类功能。解决方法只是使用计数器:
public class XMLHandler extends DefaultHandler {
private int counter = 0;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (counter < 20) {
...
} else {
return;
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
counter++;
....
}
...
}
这里可选的是对0
显式分配计数器值(默认情况下将采用该值)。
答案 1 :(得分:1)
按其他人的建议添加计数器。但是,您可以通过从ContentHandler中抛出SAXException来中止解析。这将被传递回调用parse()的应用程序,该应用程序可以捕获异常,检查它以区别于真正的解析错误,然后继续正常。