【问题标题】:Parse HTML using Html Agility Pack and Xpath使用 Html Agility Pack 和 Xpath 解析 HTML
【发布时间】:2014-07-13 13:18:47
【问题描述】:

我有以下 HTML:这是文本格式的 html 文件 我正在从本地硬盘读取这个:

 "<span style=""font-size:14px;""><span style=""""><strong>Description:</strong><br />
  Material:Cotton+Polyester<br />
  Color:White-Black<br />
  Occasion: Casual<br /><br />
<strong>Details&nbsp;in&nbsp;size:</strong></span></span><br />

<div border=""1"" class=""tab02"" style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; text-align: center; font-size: 14px; font-family: Arial- Helvetica- sans-serif;"" width=""100%"">
<div>
    <div style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px;"">
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            US Size</span>
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            M</span>
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            L</span>
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            XL</span>
    </div>
    <div style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px;"">
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            Asian&nbsp;Size</span>
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            L</span>
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            XL</span>
        <span style=""border: 1px dashed rgb(204- 204- 204); border-collapse: collapse; border-spacing: 0px; padding: 5px 10px;"">
            2XL</span>
    </div>

我需要使用 C# 和 Xpath 获取 innerDiv。 这是我到目前为止所做的:我使用 Xpath 和

string SizeDescriptions = File.ReadAllText(@"E:\Elance\Product Description     HTML\HTML_Product_Description.txt");
        HtmlDocument document = new HtmlDocument();
        string htmlString = SizeDescriptions;// "<html>blabla</html>";
        document.LoadHtml(htmlString);
        HtmlNodeCollection collection = document.DocumentNode.SelectNodes("//div").FindFirst("div").ChildNodes;
        foreach (HtmlNode link in collection)
        {
            HtmlNodeCollection Sizes = link.SelectNodes("/div/span");
            foreach(HtmlNode SizeDiv in Sizes)
            {
                TableRow tr1 = new TableRow();
                TableCell cell1 = new TableCell();
                tr1.


            }
            string target = link.Attributes["href"].Value;
        }

【问题讨论】:

  • innerDiv 是哪个 div?是类还是 id?
  • HTML 不能以引号开头。
  • @AgentFire HTML 可以以任何开头,并且可以包含非平衡引号、标签的任意组合。有效的 HTML(在野外找不到,国家动物园里有物种:))确实不能以引号开头。
  • "//div" 选择整个文档中的所有div 元素...如果您需要帮助,您可能需要描述您需要选择的节点...
  • @Uriil 需要在最下面的两个 div 中获取 span 元素的 innerText(可能更多)

标签: c# xpath html-agility-pack


【解决方案1】:

使用

HtmlNodeCollection innerDivs = document.DocumentNode.SelectNodes("//div/div");
foreach (HtmlNode div in innerDivs)
{
    HtmlNodeCollection spans = link.SelectNodes("span");
    foreach(HtmlNode span in spans)
    {
        string text = span.InnerText;


    }

}

当然,如果跨度属于哪个 div 无关紧要,那么只需使用一个 XPath 和 foreach 例如

HtmlNodeCollection spans = document.DocumentNode.SelectNodes("//div/div/span");

foreach(HtmlNode span in spans)
{
    string text = span.InnerText;


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多