3

XMLデータである文字列があります。いくつかのノードを削除し、いくつかを追加した後。xmlデータには多くの空白が含まれています(ノードの削除中に作成されます)。

<A>
<B>
</B>

<!-- some node i deleted and lot of white spaces -->



<c>
</c>


<!-- some more node i deleted and lot of white spaces -->




<E>
</E>

文字列操作後の必要な出力

<A>
<B>
</B>
<c>
</c>
<E>
</E>
</A>

replaceAll( "\ s"、 "")を使用できますが、これにより改行文字も削除され、UIで表示するための構造からxmlが作成されます。

改行文字をトリミングせずにトリミングする方法はありますか?

編集:このXMLデータはOMElementの一部です

4

5 に答える 5

3

意味を明確にできますか?新しい行以外の空白を意味する場合は、次のようにしてみてください

str = str.replaceAll("[ \t\x0B\f\r]", "");

...または、代わりに、無関係な新しい行を削除したいという意味ですか?

str = str.replaceAll("\n{2,}", "\n");

' '...または、文字通りのスペースのみを削除しますか?

str = str.replace(" ", "");
于 2012-09-12T05:46:22.727 に答える
2

この文字列を使用してみてくださいsomeString.replaceAll("\\u0020","") 空白の終わりであり、仕事をする必要があります

編集済み:他に必要な場合は、この質問をご覧ください。あなたはtchristの答えに他の人を見つけるでしょう。

于 2012-09-12T05:46:27.313 に答える
2

str.replaceAll("(</[^>]+>)\\s+(<[^>]+>)","$1\n$2")タグ間のスペースを検出して削除する正規表現を使用することをお勧めします。行の一端だけを残します

于 2012-09-12T05:47:14.500 に答える
1

DocumentBuilderを使用して XML を変更している場合は、以下の方法も使用できます。

DocumentBuilderFactory.setIgnoringElementContentWhitespace

このファクトリによって作成されたパーサーが要素コンテンツの空白を削除する必要があることを指定します (大まかに「無視できる空白」と呼ばれることもあります)

factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
于 2012-09-12T06:25:06.320 に答える
0

これには費用のかかる方法があります。

Scanner scanner = new Scanner(str);
StringBuffer strBuff = new StringBuffer();
while(scanner.hasNextLine()){
       String line = scanner.nextLine();
           if(line.length() > 0 && !line.trim().equals("")){
                 strBuff.append("\n");
         strBuff.append(line);
       }
}

最終的にループが終了すると、xml から空の行を削除でき、xml は整形式になります。多くの xml 文字列オブジェクトが内部で作成されるため、これは大きな xml には理想的ではありません。

よろしく
ディーラジ・ジョシ

于 2012-09-24T11:21:13.187 に答える