2011-10-29 8 views
0

アポストロフィを含むXML文字列があります。私はアポストロフィを同等のものに置き換えます。&改訂された文字列を解析してXElementにします。ただし、XElementは'をアポストロフィに戻しています。XElementが文字エンティティ参照をデコードするのを防ぐ方法

XElement.Parseにエンコードされた文字列を保持させるにはどうすればよいですか?

string originalXML = @"<Description><data>Mark's Data</data></Description>"; //for illustration purposes only 
string encodedApostrophe = originalXML.Replace("'", "&#39;"); 
XElement xe = XElement.Parse(encodedApostrophe); 
+1

なぜそれが必要ですか?それらはXMLで同等です。 –

+0

私はこれまで、上記の "エンコーディング"がクライアントがXMLを書くときに明示的に要求されたケースを1つしか持っていませんでしたが、読んでいるときは決して... .NETで処理したい場合は、 2つ(したがって保存する必要はありません)、.NETの外部で処理する必要がある場合は、最初に書き込んだのと同じ方法で書き込む必要があります。 – Yahia

+0

RE:なぜ必要なのですか? ?ダウンストリームでは、xmlはいくつかの動的生成JavaScriptに埋め込まれます。埋め込まれたアポストロフィは、JavaScript文字列を分割します。 –

答えて

1

これは正しい動作です。 'が許可されている場所では、&apos;,&#39;または&#x27;と同じ動作をします。

originalXML.Replace("'", "&amp;#39;") 

または元のXMLを解析して、それを修正します:あなたがXMLで文字列リテラル&#39;を含める場合は、&をエンコードする必要があり

XElement xe = XElement.Parse(originalXML); 

var data = xe.Element("data"); 

data.Value = data.Value.Replace("'", "&#39;"); 

しかし、これを行うことは本当に奇妙なようです。たぶんあなたが解決しようとしている問題のより良い解決策があります。

また、このエンコーディングは「ASCII同等」ではなく、character entity referencesと呼ばれます。また、数字のものは、文字のUnicodeコードポイントに基づいています。

+0

Thx!私は正しい名前を反映させるために質問を編集しました。「文字エンティティの参照」 –

+0

RE:「もっと良い解決策があるのか​​もしれません...」私は提案をすることができます!ソースXML文字列にアポストロフィを含めることができます。 XElementに格納する必要があります。*そこにアポストロフィを入れてはいけません。さらに、XElement内の値もHTMLエンコードされている必要があります。 –