使用HTML编码或转义字符加载XML或XHTML内容

4

我正在开发一个内容管理系统的类。输入内容以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 .Net对象中进行一些处理并保存到数据库。我希望保留转义字符不变。以下是我的方法:

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;
}

使用这种方法会将转义字符转换为它们的实际字符。我该如何避免这种情况,保留转义字符呢?


1
你为什么想要这样做?你需要 XML 还是文本? - SLaks
所以我想要 XML,并且我希望 xmlDoc.InnerXml 的值具有转义字符。我不明白为什么它在加载时替换转义字符,这会使 XML 无效。 - CleanCoder
3
可能是 .NET XmlDocument LoadXML and Entities 的重复问题。简短回答:这是设计上的特性,不应该困扰您。真正重要的是您如何将标记输出到浏览器。 - Frédéric Hamidi
4
如果出现错误提示,那么您可能存在字符编码问题。解决此问题而不是试图绕过它。 - Quentin
2
ReggeaMan,XML和XHTML都建立在并支持Unicode,因此在XHTML中不需要转义非ASCII字符以获得格式良好的XHTML并在浏览器中正确呈现。因此,如果您在获取像£这样的字符时遇到问题,则只需让浏览器知道您发送的文档的编码即可解决该问题,请确保设置Content-Type HTTP标头的charset参数。 - Martin Honnen
显示剩余3条评论
1个回答

3

以下Joel Spolsky的博客也有所帮助。http://www.joelonsoftware.com/articles/Unicode.html - CleanCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接