Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止XElement解码字符实体引用_C#_Xml_Encoding_Xelement - Fatal编程技术网

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

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

我有一个包含撇号的XML字符串。我将撇号替换为它的等价项&将修改后的字符串解析为一个XElement。然而,XElement将“back”变为撇号

如何强制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);
stringoriginalxml=@“马克的数据”//仅供说明之用
字符串encodedApostrophe=originalXML.Replace(“'”,“';”);
XElement xe=XElement.Parse(encodedApostrophe);

这是正确的行为。在允许使用
的地方,它的工作原理与
&apos
和#39
'。如果要包括文本字符串
'
在XML中,您应该对
进行编码:

originalXML.Replace("'", "&amp;#39;")
或者解析原始XML并修改:

XElement xe = XElement.Parse(originalXML);

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

data.Value = data.Value.Replace("'", "&#39;");
但这样做似乎真的很奇怪。也许有更好的办法来解决你要解决的问题


此外,这种编码不是“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编码的。