我正在将包含一些html的字符串加载到XmlDocument类中,以便对它进行一些操作,然后再将其转换回字符串。
以下代码演示了我正在做的事情;
// Example of the HTML I am working with
var documentTypeDeclaration = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">";
var html = documentTypeDeclaration + "<html><body><div>£300 ©</div></body></html>";
// Load the HTML into an XmlDocument
var xmlDocument = new XmlDocument();
xmlDocument.XmlResolver = null;
xmlDocument.LoadXml(html);
// Manipulate the HTML...
// Get the HTML back out
var savedHtml = xmlDocument.OuterXml;
Console.WriteLine(html);
Console.WriteLine(savedHtml);
我希望输出到控制台的两行匹配,但我得到了这个 -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><body><div>£300 ©</div></body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"[]><html><body><div>£300 ©</div></body></html>
因此看起来[]已添加到doc类型声明中,并且所有HTML字符类都已转换为它们的实际字符。这尤其令人讨厌,因为HTML现在已不再符合标准。
有谁知道如何阻止XmlDocument类执行此操作?
答案 0 :(得分:1)
有谁知道如何阻止XmlDocument类执行此操作?
不,但我会使用real html parser代替XmlParser
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
// Manipulate the HTML...
StringWriter wr = new StringWriter();
doc.Save(wr);
string html2 = wr.ToString();