C# 如何防止XElement解码字符实体引用
我有一个包含撇号的XML字符串。我将撇号替换为它的等价项&将修改后的字符串解析为一个XElement。然而,XElement将“back”变为撇号 如何强制XElement.Parse保留编码字符串C# 如何防止XElement解码字符实体引用,c#,xml,encoding,xelement,C#,Xml,Encoding,Xelement,我有一个包含撇号的XML字符串。我将撇号替换为它的等价项&将修改后的字符串解析为一个XElement。然而,XElement将“back”变为撇号 如何强制XElement.Parse保留编码字符串 string originalXML = @"<Description><data>Mark's Data</data></Description>"; //for illustration purposes only string encodedAp
string originalXML = @"<Description><data>Mark's Data</data></Description>"; //for illustration purposes only
string encodedApostrophe = originalXML.Replace("'", "'");
XElement xe = XElement.Parse(encodedApostrophe);
stringoriginalxml=@“马克的数据”//仅供说明之用
字符串encodedApostrophe=originalXML.Replace(“'”,“';”);
XElement xe=XElement.Parse(encodedApostrophe);
这是正确的行为。在允许使用”
的地方,它的工作原理与&apos代码>,和#39代码>或'代码>。如果要包括文本字符串'
在XML中,您应该对和进行编码:
originalXML.Replace("'", "&#39;")
或者解析原始XML并修改:
XElement xe = XElement.Parse(originalXML);
var data = xe.Element("data");
data.Value = data.Value.Replace("'", "'");
但这样做似乎真的很奇怪。也许有更好的办法来解决你要解决的问题
此外,这种编码不是“ASCII等效”,它们被称为。数字字符基于字符的Unicode码点。为什么需要它?它们在XML中是等价的。到目前为止,我只遇到过一种情况,客户在编写XML时明确要求使用上述“编码”。。。但在阅读的时候永远不会。。。如果你想在.NET中处理它,两者之间没有区别(因此不需要保存),如果你需要在.NET之外处理它,并且这是绝对必要的,那么这就需要以你第一次编写它的方式来编写它……RE:为什么我需要这样做?在下游,xml被嵌入到一些动态生成的JavaScript中。嵌入的撇号破坏了JavaScript字符串。你不能修复JavaScript吗?这看起来是一个合适的解决方案。RE:你不能修复JavaScript吗。它看起来是这样的(非常简单):var myString=“XElement.value和其他一些用撇号标记的动态值。在XElement.value中有一个游离的撇号会导致JavaScript错误。”;谢谢!我编辑了这个问题以反映正确的命名文化:“角色实体引用”RE:“也许有更好的解决方案…”我愿意接受建议!源XML字符串可能包含撇号。它需要存储在XElement中,并且不能包含撇号。此外,XElement中的值也应该是HTML编码的。