2010-03-31 32 views
2

我在html敏捷包的帮助下解析了html文件中的表格信息。如何在HTML敏捷包的帮助下从html文件中提取最内层的表格?

现在我可以做到这一点,它的工作原理。

但是,当我要提取的表格最内层。

或者我不知道它在嵌套表中的哪个位置。并且可以有任意数量的嵌套表,并且我希望提取具有列名称,地址的表的信息。

Ex。

<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
var table = doc.DocumentNode.SelectSingleNode("//table [not(descendant::table) and tr[1]/td[normalize-space()='ADDRESS'] ]"); 
+0

@康斯坦丁,你好..但是如果列位置不固定,那么我应该怎么做才能在哪个位置列名称“NAME”? – Harikrishna 2010-03-31 05:12:19

+0

@康斯坦丁,就像它会返回可能位于特定表的嵌套表中的任何位置的表,并且具有列标题名称和电话号码? – Harikrishna 2010-03-31 05:22:07

+1

@Konstantin这是稍微好一点:'td [normalize-space()='ADDRESS']' – 2010-03-31 05:31:18

2

将文档加载为HtmlDocument。然后使用XPath查询来查找不包含其他表并且在第一行中包含“Name”的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()]]"); 
+0

@Lachlan罗氏,爵士..它是不固定的,在该位置它可以。 – Harikrishna 2010-03-31 05:08:05

+0

@Harikrishna答案更新为不承担固定的专栏。 – 2010-03-31 05:12:25

+0

@Lachlan Roche,非常感谢您先生.. – Harikrishna 2010-03-31 05:14:20