XmlPullParser で Xml を解析しています。Xml タグとその中に含まれるテキストを処理したいだけですが、XmlPullParser はタグ間の空白テキスト (スペースとキャリッジ リターン) を読み取ります。この空白を無視するように設定できますか?
3 に答える
以前にXmlPullParserを使用したことはありませんが(これが完全に間違っている場合はお詫びします)、javadocsを見ると、 nextToken()を呼び出すときに、戻り値を確認してIGNORABLE_WHITESPACEをスキップする必要があるようです。
以下は不適切でした(Jeffに感謝します):ところで、XmlPullParserを使用することを余儀なくされていますか?あなたが達成しようとしているように聞こえることに基づいて、私はSimpleのようなより高いレベルのAPIを検討したいと思います。私は通常JAXBを使用しますが、それは選択によるものではありません。
空白を無視する設定がある場合は 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
}
幸運を
自分で解決策を探した後、遅い回答を追加します。
パーサーにはisWhiteSpace()
メソッドがあります。テキスト関連のイベント タイプ ( TEXT
、CDSECT
、 などIGNORABLE_WHITESPACE
) でのみ呼び出すことができます。それ以外の場合はスローされます。
next
パーサーを進める か のいずれかを呼び出すことで、eventype を取得できますgetEventType
。
呼び出しnext
は自動的にイベントをスキップしますIGNORABLE_WHITESPACE
。nextToken
このイベント タイプは、よりきめ細かく、すべてのイベント タイプにヒットする呼び出し時にのみヒットします。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);