HTMLAgilityPack 获取带有 id 属性的 td 标签的 innerText

Posted

技术标签:

【中文标题】HTMLAgilityPack 获取带有 id 属性的 td 标签的 innerText【英文标题】:HTMLAgilityPack get innerText of a td tag with an id attribute 【发布时间】: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 您的代码似乎正确。您可以将数据发布到某个地方吗? 【参考方案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='header0']", i));

    //do something with the node here

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于HTMLAgilityPack 获取带有 id 属性的 td 标签的 innerText的主要内容,如果未能解决你的问题,请参考以下文章

使用 HtmlAgilityPack.NETCore 获取网页

获取两个标签之间的内部文本 - VB.NET - HtmlAgilityPack

在 HtmlAgilityPack 中运行脚本

如何使用 HtmlAgilityPack 获取表单中的所有输入元素而不会出现空引用错误

使用 HtmlAgilityPack 下载网页时违反 HTTP 协议

HtmlAgilityPack - 找不到文件