2009-05-16 20 views
5

XML形式のファイル(ルートの開始タグと終了タグ、ルートの子からなる)があります。子要素のテキスト要素には、アンパサンド記号&が含まれています。 XMLでは、このシンボルを有効にするためにこのシンボルを使用することはできません。また、DOM APIをJavaおよびXMLパーサーで使用してファイルを処理しようとすると、解析エラーが発生しました。したがって、&を&に置き換え、ファイルを正常に処理しました。別のプレーンテキストファイルのテキスト要素の値を抽出する必要がありました。XMLファイルの特殊文字 - DOM APIを使用した処理

これらの新しく作成されたテキストファイルを開くと、&が表示されると予想されましたが、代わりに&がありました。どうしてこれなの?私はテキストを拡張子なしでテキストファイルに保存しています(XML形式のオリジナルファイルにも.xml拡張子はありません)。ファイルをどのように開いても、新しいファイルのテキストにはただ&しかありません。 (XMLエディタのいくつかのオプションです)。正確にはどうなりますか? Java(?)は&から&に自動的に変換されますか?または、デフォルトのエンコードがいくつかありますか?まあ、&は&の略で、「見えない」自動変換がいくつかあると思いますが、いつ、どのように起こるのか混乱します。ここで私は、Javaと元のファイルを処理した後、私が受け取る私の元のファイルの例と、抽出されたファイルです:

これは、XML形式での私の「negative.review」ファイルです:

<review> 
<review_text> 
I will not wear it as it is too big &amp; looks funny on me. 
</review_text> 
</review> 

これは私です解凍したファイル「negative_1」:私にとって

I will not wear it as it is too big & looks funny on me. 

(任意の変換/置換を行うことなく)であるとして、元のデータを持っていることが重要ですので、私は、私が抽出されたファイル「negative_1」の変換を処理しなければならないと思いました戻る&amp;〜&。あなたが見ているように、私はこれをする必要はないようです。なぜ:(しかし、私は理解していません。

は事前にありがとうございます!

+1

「ルートの開始タグと終了タグだけで構成され、ルートの子で構成されています。これがXMLの定義です(ルート要素は1つだけです)。 – PhiLho

+0

http://stackoverflow.com/questions/4341145/how-to-deal-with-special-characters-in-urls-inside-xml – sandeepKumar

答えて

11

理由は簡単です:XMLファイルは本当に"&"文字が含まれてい

それはちょうど異なった表現(すなわち、それは「エスケープ」される)、本物ののでれます。にはあなたが見てきたようにXMLファイルが壊れています。 XML 1.0仕様の関連セクション、"2.4 Character Data and Markup"を読んでください。それはほんの数行に過ぎませんが、問題点を非常によく説明しています。

XMLはデータ表現です(!)。テキストファイルとは考えないでください。例:

"17 < 20"という文字列をXMLファイルに保存するとします。当初、「<」は開始タグの括弧として予約されています。だから、これは無効になります:

<xml>17 < 20</xml> 

ソリューション:あなたは、単にファイルの妥当性保持の手段のために、特別な/予約文字にエスケープ文字を採用:すべての実用的な目的のため

<xml>17 &lt; 20</xml> 

をスニペットの上(JSON表現でこの時間)、以下のデータが含まれています

{ 
    "xml": "17 < 20" 
} 

あなたの後処理に本当の"&"を参照してください理由です。それはちょうど同じ方法でエスケープされましたが、という意味で、の意味は常に同じです。

上記の例では、"&"を特別に扱わなければならない理由も説明しています。それ自体はXMLエスケープメカニズムの一部です。 "&lt;"のようなエスケープシーケンスの開始を示します。したがって、あなた自身がエスケープされなければなりません(完了したように"&amp;"で)。

+0

素晴らしい回答...いつものように! +1 – Cerebrus

2

を任意のXMLパーサーは、暗黙的に構文解析のプロセスの一部として、対応する文字には、そのような&amp;&lt;&gt;などのエンティティを翻訳します。ファイル

関連する問題