C# 加载带有html编码或转义字符的XML或XHTML内容
我正在为内容管理系统开发一个类。输入内容以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
£代码>参见下面的示例
<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 £</div>
<div>Registered sign ®</div>
<div>Copyright sign © </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 £ ® and ©
}