如何将 HTML 读取为 XML?

新手上路,请多包涵

我想从从互联网下载的 html 页面中提取几个链接,我认为使用 linq to XML 对我的案例来说是一个很好的解决方案。

我的问题是我无法从 HTML 创建 XmlDocument,使用 Load(string url) 不起作用,所以我使用以下方法将 html 下载到字符串:

 public static string readHTML(string url)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse res = (HttpWebResponse)req.GetResponse();
        StreamReader sr = new StreamReader(res.GetResponseStream());

        string html = sr.ReadToEnd();
        sr.Close();
        return html;
    }

当我尝试使用 LoadXml(string xml) 加载该字符串时出现异常

'--' is an unexpected token. The expected token is '>'

我应该采取什么方式将 html 文件读取为可解析的 XML

原文由 Ziv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 262
2 个回答

HTML 与 XML 完全不同(除非 HTML 实际上恰好符合 XHTML 或 XML 模式下的 HTML5)。最好的方法是使用 HTML 解析器 来读取 HTML。之后,您可以将其转换为 Linq to XML,或直接对其进行处理。

原文由 Konrad Rudolph 发布,翻译遵循 CC BY-SA 3.0 许可协议

我自己没用过,但我建议你看看 SgmlReader 。这是他们主页的示例:

 // setup SgmlReader
Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader()
{
    DocType = "HTML",
    WhitespaceHandling = WhitespaceHandling.All,
    CaseFolding = Sgml.CaseFolding.ToLower,
    InputStream = reader
};

// create document
XmlDocument doc = new XmlDocument()
{
    PreserveWhitespace = true,
    XmlResolver = null
};
doc.Load(sgmlReader);
return doc;

原文由 Danko Durbić 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏