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标签。
【问题讨论】:
你有没有检查你拿的那些身份证。<td id="header2">
并且您正在从 (//td[@id='header1'");
检索
在html中,id是header2
,而在代码中,id是header1
。
您的代码似乎正确。您可以将数据发布到某个地方吗?
【参考方案1】:
您正在尝试选择 header1
,但 id 是 header2
。
你也可以直接使用GetElementById
:
var td = doc.GetElementbyId("header2");
【讨论】:
【参考方案2】:嗯.. 我不认为你做错了什么。您的代码应该只给您<td>
和id="header1"
。如果你有,假设从header1
到header5
,你可以这样做:
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
,以及在不执行上述循环的情况下解析<td>
节点的更好方法(例如,类似@ 987654328@.
【讨论】:
【参考方案3】:您可以使用 InnerHtml 属性解决您的问题,例如:
var td = doc.GetElementbyId("header2").InnerHtml;
【讨论】:
以上是关于HTMLAgilityPack 获取带有 id 属性的 td 标签的 innerText的主要内容,如果未能解决你的问题,请参考以下文章
使用 HtmlAgilityPack.NETCore 获取网页
获取两个标签之间的内部文本 - VB.NET - HtmlAgilityPack
如何使用 HtmlAgilityPack 获取表单中的所有输入元素而不会出现空引用错误