如何防止XElement解码字符实体引用

本文关键字:实体 引用 字符 解码 何防止 XElement | 更新日期: 2023-09-27 18:12:40

我有一个包含撇号的XML字符串。我将撇号替换为其等效的&将修改后的字符串解析为XElement。然而,XElement正在改变'回到撇号。

如何强制XElement。解析以保留编码的字符串?

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

如何防止XElement解码字符实体引用

这是正确的行为。在允许'的地方,它的工作原理与&apos;, &#39;&#x27;相同。如果希望在XML中包含字面值字符串&#39;,则应该编码&:

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

或者解析原始XML并修改:

XElement xe = XElement.Parse(originalXML);
var data = xe.Element("data");
data.Value = data.Value.Replace("'", "&#39;");

但是这样做看起来真的很奇怪。也许有一个更好的方法来解决你想要解决的问题。

同样,这种编码不是"等效ASCII",它们被称为字符实体引用。而数字则基于字符的Unicode码点。