如何在任何时候停止使用SAX解析xml文档?

时间:2009-08-28 06:14:00

标签: java xml sax

我用Sax解析一个大的xml文档,我想在某些条件建立时停止解析文档?怎么办?

3 个答案:

答案 0 :(得分:39)

创建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();
    }
    ...
}

答案 1 :(得分:4)

除了异常抛出技术outlined by Tom之外,我不知道中止SAX解析的机制。另一种方法是切换到使用StAX parser(请参阅pull vs push)。

答案 2 :(得分:2)

我使用布尔变量“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,supossing有这个.xml

<root>
        <article>
               <title>Jorgesys</title>
        </article>
        <article>
               <title>Android</title>
        </article>
        <article>
               <title>Java</title>
        </article>
</root>

使用android SAX获取“title”值的解析器必须是:

   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);
                }
            });