0

私はSAXを使用してXMLを解析し、そこからいくつかの要素を取得しています。

XML では、<item>タグの回数 (簡単に > 50) が存在します。しかし、最初の20個だけを取得したいです。

XMLHander を呼び出すコード:

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回以上呼び出されない方法はありますか?

そうでない場合、回避策はありますか?

ありがとう

4

2 に答える 2

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です(デフォルトではその値を取ります)。

于 2013-01-26T12:35:49.997 に答える
1

他の人が提案したようにカウンターを追加します。ただし、ContentHandler から SAXException をスローすることにより、解析を中止できます。これは parse() を呼び出したアプリケーションに戻されます。アプリケーションは例外をキャッチし、検査して本物の解析エラーと区別し、通常どおり続行します。

于 2013-01-26T15:33:18.647 に答える