我正在尝试使用带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上犯了一个错误,但是有5个不同的td标签,标题为1到5。
答案 0 :(得分:6)
您正在尝试选择header1
,但ID为header2
。
您也可以直接使用GetElementById
:
var td = doc.GetElementbyId("header2");
答案 1 :(得分:1)
<td>
提供id="header1"
。如果您有,请说,从header1
到header5
,您可以这样做:
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
,并且在不执行上述循环的情况下解析<td>
节点的更好方法(例如,像//tr[@id='some-id']//td[contains(@id, 'header')]
这样的东西。
答案 2 :(得分:0)
您可以使用InnerHtml属性解决您的问题,如:
var td = doc.GetElementbyId("header2").InnerHtml;