C# 加载带有html编码或转义字符的XML或XHTML内容

C# 加载带有html编码或转义字符的XML或XHTML内容,c#,.net,xml,c#-4.0,linq-to-xml,C#,.net,Xml,C# 4.0,Linq To Xml,我正在为内容管理系统开发一个类。输入内容以XHTML格式提供。它可以包含有效的转义字符,如£参见下面的示例 <html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head xmlns=""> <meta name="Attr_DocumentTitle" content="Hello World Books" /> </head> &l

我正在为内容管理系统开发一个类。输入内容以XHTML格式提供。它可以包含有效的转义字符,如
£参见下面的示例

<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head xmlns="">
    <meta name="Attr_DocumentTitle" content="Hello World Books" />
   </head>
  <body>

 <div>British Pound   &#163;</div>

 <div>Registered sign &#174;</div>

 <div>Copyright sign &#169; </div>

  </body>
</html>
但是,此方法将转义字符转换为其等效字符。如何避免这种情况并保留转义字符。

请检查:

您为什么要这样做?要在浏览器中呈现XML还是文本。使用特殊字符时,它会抛出错误,因为它将不是有效的xml。的可能重复。简短回答:这是故意的,不应该打扰你。真正重要的是您将标记输出到浏览器的方式。@ReggaeMan-如果它抛出错误,那么您就有字符编码问题。处理这个问题,而不是试图解决它。ReggeaMan、XML和XHTML构建并支持Unicode,因此不需要在XHTML中转义非ASCII字符,就可以获得格式良好的XHTML并在浏览器中正确呈现。因此,我认为如果您在正确呈现
等字符时遇到问题,那么这只是让浏览器知道您发送的文档编码的问题,因此请确保设置内容类型HTTP头的字符集参数。Joel Spolsky的以下博客也提供了帮助。
public static XmlDocument LoadXmlFromString(string xhtmlContent)
{
    byte[] xhtmlByte = Encoding.ASCII.GetBytes(xhtmlContent);
    MemoryStream mStream = new MemoryStream(xhtmlByte);
    XmlReaderSettings settings = new XmlReaderSettings();
    //Upon loading XML, prevent DTD download, which would be blocked by our 
    //firewall and generate "503 Server Unavailable" error.
    settings.XmlResolver = null;
    settings.ProhibitDtd = false;
    XmlReader reader = XmlReader.Create(mStream, settings);
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(xhtmlContent);
    return xmlDoc; //Value of xmlDoc.InnerXml contains £ ® © in place 
                    // of &#163; &#174; and &#169;
}