在使用.NET XmlDocument类时,如何保留XML字符类?

时间:2012-11-07 21:49:59

标签: .net xml

我正在将包含一些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>&#163;300&#160;&#169;</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>&#163;300&#160;&#169;</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类执行此操作?

1 个答案:

答案 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();