0

次のように、START_ELEMENT に対応する終了タグ (END_ELEMENT) を見つける簡単な方法はありますか?

while(reader.hasNext()){
        XMLEvent event = reader.nextEvent();

        if(event.getEventType() == XMLEvent.START_ELEMENT){
            StartElement startElement = event.asStartElement();
            System.out.println(startElement.getName().getLocalPart());
        }
    }
4

2 に答える 2

1

ちなみに、最後の要素を返すための呼び出しを行う簡単な方法がある場合、答えはノーです。SAX パーサーはイベント ベースのパーサーであるため、XML ファイルを読み取り、イベントを作成します。これらのイベントを処理し、これらのイベントが発生したときにメモリ構造を構築するのはあなた次第です。

おそらく、メモリ内に XML 構造を構築する DOM パーサーを使用する必要があり、その中をナビゲートできます。または、XML を Java オブジェクトに、またはその逆に変換する XML バインド (JAXB など) を使用します。

于 2013-02-28T20:31:25.413 に答える
0

私が考えることができる最も簡単な方法は次のとおりです。

  • 内部深度カウンターStreamFilterを持つを作成します。その方法は次 のとおりです。accept
    • イベントが発生するたびに増加し、イベントが発生START_ELEMENTするたびに減少しますEND_ELEMENT
    • true深さがゼロの場合にのみ返す
  • FilterReader特定の開始タグに遭遇したときに、元のストリームのこのフィルターに基づいてから読み取るには:

それで

    if(event.getEventType() == XMLEvent.START_ELEMENT){
        StartElement startElement = event.asStartElement();
        System.out.println(startElement.getName().getLocalPart());
        if (/* you want the end of this start tag */) {
          Reader forwardToMatchingEndReader = xmlInputFactory.createFilterReader(reader, filter)
          XMLEvent matchingEndEvent = forwardToMatchingEndReader.next();
        }
    }
于 2013-02-28T22:03:02.800 に答える