2011-05-11 5 views
4

私はパーサを通す必要があるXML文字列を与えられました。現在、不正なxml文字のためにその文句を言います。非常に簡単な例:xmlを構文解析に安全にするにはどうしたらいいですか?

<someXml>this & that</someXml> 

私は解決策が&amp;&を交換することであることを知っているが、私はXMLを生成しないことだし、そのための値を制御することはできません。 「&」はXMLで特別な意味を持っており、グローバルで「&」の置き換え以来

単純な文字列置換するが、これにに正しい方法ではありません「&アンペア;」意図された特別な意味を失うことになる。完全なXML文書を取得し、 '&'が '& amp;'になるように '修正'する方法はありますか?グローバルに「&」を「& amp」に置き換えても安全ですか? '(両側のスペースに注意してください)?

+0

与えられた文字列はNOT xmlなので、エラーメッセージに興味がある場合を除き、XMLパーサーに渡すポイントはありません。非XMLデータを処理するには、非XMLパーサーが必要です。 –

+0

私の目的は上記のものを有効なXMLに変換して解析することですが、良い点です。 (または、あなたが言うように、それを解析するために非XMLパーサーを使用します)。 –

答えて

4

実際に実際に起こる可能性がある状況のため、これは興味深い質問だと思います。適切なことは、XMLプロバイダにXMLを修正して有効にするよう求めることですが、寛大なパーサで試してみるという選択肢があると思いました。私はいくつかの検索を行い、この同じ問題を話しているこのblog postを見つけ、私が考えていたのと同じ解決策を提案しました。 jsoupで試してみてください。私は、これが最善のことではないと思います。XMLプロバイダにそれを修正するように依頼してください。

+0

MarcoSに感謝します。私は寛大なパーサの考えが好きですが、あなたが正しいと思います。プロバイダーに正しくフォーマットされたXMLを要求してください! –

0

XML文字を破棄(エンコード)するため、これを行うことはできません。 XMLを生成するライブラリにコードを書き直す必要があります。

0

この質問から自分でXMLを作成するかどうかは不明ですが、そうであれば、XMLライブラリを使用して、これを行うことができます。

しかし、これはあなたが与えたXMLのように聞こえるので、これを行うにはApache Commons Langの使用をお勧めします。これはあなたが探しているメソッド、escapeXml(String)を持つクラス 'StringEscapeUtils'を持っています。

+0

感謝のニコラス。私はxmlを自分で作成していません(それは簡単な修正です)ので、残念ながらStringEscapeUtilsは私にとってはうまくいきません。 –

+0

StringEscapeUtilsは、あなたが持っているものなど、渡されたStringで動作します。しかし、今私はそれについて考えています。あなたがXML文書全体を渡すならば、それはおそらくすべてをエスケープするでしょう!おそらくあなたが探しているものではありません... –

0

追加のXMLコンテンツを保持するXMLタグ内にCDATAセクションを使用してみませんか?それで、孤独なアンパサンドは問題ではないでしょう。

+0

私はXMLを生成していないことを除いて、これは動作します:( –

8

この文書の提供元に修正を依頼することをお勧めします。それはそのままです。(有効)XML!彼らがXML形式にコミットした場合、それを修正する必要があります。

関連する問題