1

XML の開始タグと終了タグの間の内容だけを出力する方法があります。XML 深度カウンターが問題であることはわかっていますが、どこに配置/修正すればよいかわかりません。ここに XML があります。

<XMS>
    <Object>
        <Property>
            <Value>1</Value>
        </Property>
    </Object>
</XMS>

これがJavaコードです...

    Boolean flag = false;

    while(reader.hasNext()) {
        eventType = reader.next();

        if(getEventType(eventType) == "START_ELEMENT" 
                && reader.getLocalName() == startTagName){
            flag = true;
            depth++;
            System.out.println(reader.getLocalName() + " Depth = " + depth);
        }
        else if(getEventType(eventType) == "END_ELEMENT"
                && flag == true
                && (depth == 0)){
            depth--;
            System.out.println(reader.getLocalName() + " Depth = " + depth + " BIG END");
            break;
        }
        else if(getEventType(eventType) == "START_ELEMENT"
                && flag == true){
            depth++;
            System.out.println(reader.getLocalName() + " Depth = " + depth);
        }
        else if(getEventType(eventType)== "END_ELEMENT"
                && flag == true){
            depth--;
            System.out.println(reader.getLocalName() + " Depth = " + depth + " END");
        }
    }
}

GetEventType は、適切な eventType を返すだけです (適切に機能します)。そして、これがコンソールからの出力です。

Object Depth = 1
Property Depth = 2
Value Depth = 3
Value Depth = 2 END
Property Depth = 1 END
Object Depth = 0 END
XMS Depth = -1 BIG END

問題は、深さ = 0 のときに最後のオブジェクトで終了し、XMS 深さ = -1 に到達する前に停止する必要があることです。何かアドバイス?

4

3 に答える 3

1

深さがゼロではなく1に等しいかどうかを比較するのと同じくらい簡単でしょうか?

「オブジェクト」要素内にいる場合、深さ == 1 であるため、「オブジェクト」終了タグに遭遇した場合はチェックする必要があります。

   ... && (depth == 1)
于 2013-03-20T15:55:25.880 に答える
0

あなたのコードで

    else if(getEventType(eventType) == "END_ELEMENT"
                    && flag == true
                    && (depth == 0)){
                depth--;
//rest of your code

if 条件は(depth == 0)条件の 1 つとしてあり、メソッド本体で実行していdepth--;ます。深さを -1 に減らしませんか?

私の質問は: あなたが持っている場合、本当にする必要があり depth--;ます if (depth == 0)か?

于 2013-03-20T16:01:28.393 に答える
0

EventType はint文字列ではありません。間違った値と比較しています。また、Java で Strings を比較するのではなく==、 を使用しますequals()。また、フラグはboolean(プリミティブ) にする必要があります。

今後の注意事項として、このような問題に直面した場合は、SO に投稿するのではなく、ロジックの問題を見つけるためにデバッガーでコードを実行する方法を学んでください。

于 2013-03-20T15:41:28.887 に答える