Я анализирую большой XML-документ с помощью Sax, я хочу прекратить разбор документа при установлении какого-либо условия? Как это сделать?
Как остановить анализ XML-документа с помощью SAX в любое время?
Ответ 1
Создайте специализацию исключения SAXException и бросьте ее (вам не нужно создавать свою специализацию, но это означает, что вы можете специально ее поймать и рассматривать другие SAXExceptions как фактические ошибки).
public class MySAXTerminatorException extends SAXException {
...
}
public void startElement (String namespaceUri, String localName,
String qualifiedName, Attributes attributes)
throws SAXException {
if (someConditionOrOther) {
throw new MySAXTerminatorException();
}
...
}
Ответ 2
Мне не известно о механизме прекращения синтаксического анализа SAX, кроме метода метаданных исключения изложенного Томом. Альтернативой является переход на использование анализатор STAX (см. pull vs нажмите).
Ответ 3
Я использую логическую переменную "stopParse
", чтобы потреблять слушателей, так как я не люблю использовать throw new SAXException()
;
private boolean stopParse;
article.getChild("title").setEndTextElementListener(new EndTextElementListener(){
public void end(String body) {
if(stopParse) {
return; //if stopParse is true consume the listener.
}
setTitle(body);
}
});
Обновление:
@PanuHaaramo, судя по этому .xml
<root>
<article>
<title>Jorgesys</title>
</article>
<article>
<title>Android</title>
</article>
<article>
<title>Java</title>
</article>
</root>
синтаксический анализатор, получающий значение "title" с использованием SAX SA, должен быть:
import android.sax.Element;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
...
...
...
RootElement root = new RootElement("root");
Element article= root.getChild("article");
article.getChild("title").setEndTextElementListener(new EndTextElementListener(){
public void end(String body) {
if(stopParse) {
return; //if stopParse is true consume the listener.
}
setTitle(body);
}
});