我试图解析下面的表,但不幸的是每个节点似乎互相嵌套。 :(不可能获得childnodes因为它总是给count = 1
这很有意思,但它正在寻找;例如,下一个“tr”作为前一个tr?
的子节点你有什么想法吗?
<table width="292px" border="0">
<tr>
<td>
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td colspan="2" bgcolor="#FBCE9D" align="center" height="40">
</td>
</tr>
<tr>
<td bgcolor="#FFF4D2" height="25" width="60">
</td>
<td height="25" bgcolor="#e8e8e8">
</td>
</tr>
<tr>
<td bgcolor="#FFF4D2" height="25" width="60">
</td>
<td height="25" bgcolor="#e8e8e8">
</td>
</tr>
<tr>
<td bgcolor="#FFF4D2" height="25" width="60">
</td>
<td height="25" bgcolor="#e8e8e8">
</td>
</tr>
<tr>
<td bgcolor="#FFF4D2" height="25" width="60">
</td>
<td height="25" bgcolor="#e8e8e8">
</td> //Here is a missing "</tr>" and I think this one is confusing the agilitypack!
<tr>
<td bgcolor="#FFF4D2" height="35" colspan="2" align="center">
</td>
</tr>
</table>
</td>
</tr>
</table>
我的代码是:
var webGet = new HtmlWeb();
var doc = webGet.Load("the url where this table is located");
HtmlNodeCollection tb = doc.DocumentNode.SelectNodes("//table[@width='292px']");
var table = tb[0].ChildNodes[1].ChildNodes[0].ChildNodes[0].ChildNodes;
for (var na = 0; na < table.Count; na++)
{ .....do the work.... }
实际上这段代码之前就像魅力一样,但它们嵌套了另一张桌子,因为没有ChildNodes[1]
它始终是ChildNodes[1]
?
再说一遍; Firebug显示“/ html / body / table / tbody / tr [2] / td / table / tbody”作为嵌套表的XPath,但是您可能会注意到“tbody”不熟悉htmlagility,因为它是由动态生成的浏览器用于删除缺少的关闭标记/ tr
答案 0 :(得分:1)
这真的很有趣,但问题是HmtlAgility包实际上可以在Nuget获得!我将其删除并从网上下载(http://htmlagilitypack.codeplex.com/)。它现在正在运作!
答案 1 :(得分:0)
XPATH
会在这里帮到你很多。
对于内部表tr
节点,您可以尝试以下
doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr")
如果要在内部表中遍历td
个节点,那么
doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr/td")