我在html敏捷包的帮助下解析html文件中的表格信息。
现在我可以做到并且有效。
但是当我想要提取的表格最内部时。
或者我不知道它在嵌套表中的哪个位置。并且可以有任意数量的嵌套表,并且我想从中提取具有列名称,地址的表的信息。
实施例。
<table>
<table>
<tr><td>PHONE NO.</td><td>OTHER INFO.</td></tr>
<tr><td>
<table>
<tr><td>AMOUNT</td></tr>
<tr><td>50000</td></tr>
<tr><td>80000</td></tr>
</table>
</td></tr>
<tr><td>
<table>
<tr><td>
<table>
<tr><td>
<table>
<tr><td> NAME </td><td>ADDRESS</td>
<tr><td> ABC </td><td> kfks </td>
<tr><td> BCD </td><td> fdsa </td>
</table>
</tr></td>
</table>
</td></tr>
</table>
</td></tr>
</table>
有很多表,但我想提取具有列名称,地址的表。 所以我该怎么做 ?
答案 0 :(得分:2)
将文档加载为HtmlDocument。然后使用XPath查询查找不包含其他表的表,并在第一行中包含“名称”的td。
XPath实现是来自System.Xml.XPath
的标准.NET实现,因此任何有关将XPath与XmlDocument一起使用的文档都将适用。
HtmlDocument doc = new HtmlDocument();
doc.Load("file.html");
HtmlNode el = (HtmlNode) doc.DocumentNode.SelectSingleNode("//table[not(descendant::table) and tr[1]/td['NAME' = normalize-space()]]");
如果“名称”列已修复,您可以使用'Name' = normalize-space(tr[1]/td[2])
。
根据多个列名查找表,但不是最内层的表条件。
HtmlNode el = (HtmlNode) doc.DocumentNode.SelectSingleNode("//table[tr[1]/td['NAME' = normalize-space()] and tr[1]/td['ADDRESS' = normalize-space()]]");
答案 1 :(得分:0)
var table = doc.DocumentNode.SelectSingleNode("//table [not(descendant::table) and tr[1]/td[normalize-space()='ADDRESS'] ]");