【问题标题】:HTMLAgilityPack get innerText of a td tag with an id attributeHTMLAgilityPack 获取带有 id 属性的 td 标签的 innerText
【发布时间】:2013-03-05 03:12:25
【问题描述】:

我正在尝试使用 HTMLAgilityPack 选择具有 id 属性的 td 的内部文本。

HTML代码:

<td id="header1">    5    </td>
<td id="header2">    8:39pm    </td>
<td id="header3">    8:58pm    </td>
...

代码:

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

doc.LoadHtml(data);

var nodes = doc.DocumentNode.SelectNodes("//td[@id='header1']");

if (nodes != null)
{
    foreach (HtmlAgilityPack.HtmlNode node in nodes)
    {
        MessageBox.Show(node.InnerText);
    }
}

我不断得到空节点,因为我没有正确选择 td 标签,但无法弄清楚我做错了什么......

编辑:

header1和header2我弄错了,但是headers 1到5有5个不同的td标签。

【问题讨论】:

  • 你有没有检查你拿的那些身份证。 &lt;td id="header2"&gt; 并且您正在从 (//td[@id='header1'"); 检索
  • 在html中,id是header2,而在代码中,id是header1
  • 您的代码似乎正确。您可以将数据发布到某个地方吗?

标签: c# html html-agility-pack nodes html-table


【解决方案1】:

您正在尝试选择 header1,但 id 是 header2

你也可以直接使用GetElementById

var td = doc.GetElementbyId("header2");

【讨论】:

    【解决方案2】:

    嗯.. 我不认为你做错了什么。您的代码应该只给您&lt;td&gt;id="header1"。如果你有,假设从header1header5,你可以这样做:

    for (int i = 1; i <= 5; i++ ) {
        var tdNode = doc.DocumentNode.SelectSingleNode(string.Format("//td[@id='header{0}']", i));
    
        //do something with the node here
    }
    

    虽然我建议你发布你的整个代码,以便我们可以告诉你为什么你会得到null,以及在不执行上述循环的情况下解析&lt;td&gt; 节点的更好方法(例如,类似@ 987654328@.

    【讨论】:

      【解决方案3】:

      您可以使用 InnerHtml 属性解决您的问题,例如:

      var td = doc.GetElementbyId("header2").InnerHtml;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-25
        • 2017-06-17
        • 2020-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多