0

我正在将包含一些 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 类这样做?

4

1 回答 1

1

有谁知道我怎样才能阻止 XmlDocument 类这样做?

不,但我会使用真正的 html 解析器而不是 XmlParser

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

 // Manipulate the HTML...

StringWriter wr = new StringWriter();
doc.Save(wr);
string html2 = wr.ToString();
于 2012-11-07T22:05:49.153 回答