2

我在 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>

有很多表,但我想提取具有列名名称、地址的表。所以我该怎么做 ?

4

2 回答 2

2

将文档加载为 HtmlDocument。然后使用 XPath 查询查找不包含其他表并且在包含“名称”的第一行中有一个 td 的表。

XPath 实现是来自 .NET 的标准实现System.Xml.XPath,因此任何有关将 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()]]");
于 2010-03-31T04:41:58.753 回答
0
var table = doc.DocumentNode.SelectSingleNode("//table [not(descendant::table) and tr[1]/td[normalize-space()='ADDRESS'] ]");
于 2010-03-31T05:08:07.397 回答