在XDocument中读取html字符串时没有html元素

时间:2017-07-19 14:27:02

标签: c# html linq linq-to-xml

我正在阅读HTML,目的是从中提取 }的内容。

以下标记由DevExpress RichEditControl

生成
<body>

根据this answer关于如何阅读文档的示例,我编写了以下函数:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>
        </title>
        <style type="text/css">
            .cs95E872D0{text-align:left;text-indent:0pt;margin:0pt 0pt 0pt 0pt}
            .csCF6BBF71{color:#000000;background-color:transparent;font-family:Times New Roman;font-size:12pt;font-weight:normal;font-style:normal;}
        </style>
    </head>
    <body>
        <p class="cs95E872D0"><span class="csCF6BBF71">Content goes here</span></p></body>
</html>

似乎它应该在理论上起作用,但在实践中,LINQ查询不返回private string ParseHtml(string html) { XDocument doc = XDocument.Parse(html); return doc.Elements("html").Single().Element("body").Value; } 的结果

我是不是在这里?如何阅读html文档并提取我需要的内容?

1 个答案:

答案 0 :(得分:1)

可能是因为您需要添加命名空间:

 private string ParseHtml(string html)
 {
    XNamespace xmlns= "http://www.w3.org/1999/xhtml";

    XDocument doc = XDocument.Parse(html);
    return doc.Element(xmlns+"html").Element(xmlns+"body").Value;
 }

或者:

return doc.Descendants(xmlns+"body").Single().Value;

解析html的一种好方法是使用HTML Agility Pack