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

コンソールへの 2 行の出力が一致することを期待しますが、代わりに次のようになります。

    <!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 クラスがこれを行うのを止める方法を知っている人はいますか?

いいえ。ただし、XmlParser の代わりに実際の HTML パーサーを使用します

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 に答える