5

私は以下と同じXMLファイルを読んでいます:

<ts>
    <tr comment="" label="tr1">
        <node order="1" label="" />
    </tr>
</ts>

eそして、私は以下のコードが画面に3つ出力されることを期待していました。

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader sr = factory.createXMLStreamReader(new FileReader("test.xml"));

while (sr.hasNext()) {
    int eventType = sr.next();

    if (eventType == XMLStreamReader.START_DOCUMENT) {
        continue;
    } else if (eventType == XMLStreamReader.END_ELEMENT) {
        System.out.println("e");
    } else if (eventType == XMLStreamReader.START_ELEMENT) {
        System.out.println("s");
    }
}

しかし、それは機能しません!問題を解決する方法について何かアイデアはありますか?

注:これはセルフクローズタグに関連していると思います。例:<myTag id="1" />

4

2 に答える 2

5

私はJDK1.7を使用しているWindowsを使用しており、BlaiseDoughanと同じ結果が得られています。

s
s
s
e
e
e

ドキュメントには次のように記載されている<node order="1" label="" />ので、私はそれが関係しているとは思わない。

:空の要素(など<tag/>)は、2つの別々のイベントで報告されます:START_ELEMENTEND_ELEMENT-これにより、空の要素との解析の同等性が保持されます<tag></tag>。このメソッドは、 falseを返したIllegalStateException後に呼び出された場合にをスローし ます。hasNext()

ロングショット:他の関連コードが奇妙な動作を引き起こしている可能性がありますか?

于 2012-08-25T17:30:51.043 に答える
3

あなたの質問に投稿されたコードはe、私にとって期待される3つを生み出しました。MacでJDK1.6を使用しています。

デモ

次のコードを実行して、欠落している終了要素イベントを確認することをお勧めします。

import java.io.FileReader;
import javax.xml.stream.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader sr = factory.createXMLStreamReader(new FileReader("test.xml"));
        System.out.println(sr.getClass());

        while (sr.hasNext()) {
            int eventType = sr.next();

            if (eventType == XMLStreamReader.START_DOCUMENT) {
                continue;
            } else if (eventType == XMLStreamReader.END_ELEMENT) {
                System.out.println("End Element:    " + sr.getLocalName());
            } else if (eventType == XMLStreamReader.START_ELEMENT) {
                System.out.println("Start Element:  " + sr.getLocalName());
            }
        }
    }

}

出力

以下は私が得た出力です。

class com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl
Start Element:  ts
Start Element:  tr
Start Element:  node
End Element:    node
End Element:    tr
End Element:    ts
于 2012-08-25T17:21:14.593 に答える