我已经使用XML
实现了我的SAXParser
解析器,但我找不到如何设置它以便解析在一定数量的元素之后立即停止。
我想在我的Handler
中声明一个int属性来计算结果,如果count>N
方法只返回,但这样就完全读取了xml文档。
修改
通过braj的解决方案,我解决了这个问题:
在Handler
的实施中:
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException,MySAXTerminatorException {
if (count > cap)
throw new MySAXTerminatorException();
然后当我们调用解析器时:
try {
sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler((ContentHandler) handler);
xr.parse(new InputSource(new StringReader(xml)));
output.addAll(handler.getParsedData());
return output;
}
catch(MySAXTerminatorException e){
output.addAll(handler.getParsedData());
return output;
}
这样一来,当你达到上限时,它会中断解析。
答案 0 :(得分:1)
不确定,但希望有所帮助。
为异常创建一个类。
public class MySAXTerminatorException extends SAXException {
...
}
我猜在SAX解析器中有一个名为startElement(...)
的重写方法。
保留一个全局布尔变量,在需要时将其设置为true,并在startElement方法的第一行中继续检查此值。
由于每次控制都必须使用此方法,因此只要该布尔值变为true,执行就会以异常终止。
像这样的东西
if (someConditionOrOther) {
throw new MySAXTerminatorException();
}