0

XmlPullParser で Xml を解析しています。Xml タグとその中に含まれるテキストを処理したいだけですが、XmlPullParser はタグ間の空白テキスト (スペースとキャリッジ リターン) を読み取ります。この空白を無視するように設定できますか?

4

3 に答える 3

1

以前にXmlPullParserを使用したことはありませんが(これが完全に間違っている場合はお詫びします)、javadocsを見ると、 nextToken()を呼び出すときに、戻り値を確認してIGNORABLE_WHITESPACEをスキップする必要があるようです。

以下は不適切でした(Jeffに感謝します):ところで、XmlPullParserを使用することを余儀なくされていますか?あなたが達成しようとしているように聞こえることに基づいて、私はSimpleのようなより高いレベルのAPIを検討したいと思います。私は通常JAXBを使用しますが、それは選択によるものではありません。

于 2012-12-30T21:35:17.197 に答える
1

空白を無視する設定がある場合は IDK。現在のノードを文字列として追跡する場合は、空白を無視するようにコーディングできます。現在のノードが空白の場合は、テキストを無視してください。私のテストでは、それが改行などをエスケープしただけであることがわかりました。私はそれを次のように最適化しました。 危険これは私が使用しているxmlで機能しますが、あなたのものでは機能しない可能性があります

String N="";  // Yes I know its Capitalized but its the Current Node and very important to keep track of.


if (eventType == XmlPullParser.START_TAG) {
    N = xpp.getName();//save the name of the node.

...

} else if (eventType == XmlPullParser.END_TAG) {
    N = "";//clear the name of the node.
} else if (eventType == XmlPullParser.TEXT) {
    //if the name of the node is not blank then process it
if (!N.equals("")) {
        //I have a node so process it
    }

幸運を

于 2013-08-30T18:38:44.527 に答える
0

自分で解決策を探した後、遅い回答を追加します。

パーサーにはisWhiteSpace()メソッドがあります。テキスト関連のイベント タイプ ( TEXTCDSECT、 などIGNORABLE_WHITESPACE) でのみ呼び出すことができます。それ以外の場合はスローされます。

nextパーサーを進める か のいずれかを呼び出すことで、eventype を取得できますgetEventType

呼び出しnextは自動的にイベントをスキップしますIGNORABLE_WHITESPACEnextTokenこのイベント タイプは、よりきめ細かく、すべてのイベント タイプにヒットする呼び出し時にのみヒットします。next を呼び出すことで「無視できる」空白をスキップしていますが、パーサーはまだほとんどすべての空白を無視できないと判断するため、スキップするにはユーザーの許可が必要です。

    boolean isEoD = false;

    do{
        switch (parser.next()){

            default:
                break;
            case XmlPullParser.TEXT:

                if(!parser.isWhitespace())  //Throws if called on wrong eventType
                    System.out.println("Text: " + parser.getText());

                break;
            case XmlPullParser.START_TAG:
            case XmlPullParser.END_TAG:
                System.out.println("TAG: " + parser.getName()+ "\n");
                break;

            case XmlPullParser.END_DOCUMENT:
                isEoD = true;
        }
    }while(!isEoD);
于 2016-09-08T12:32:00.373 に答える