2010-09-13 121 views
1

因此,我可以轻松地使用LINQ to XML来遍历正确设置的XML文档。但是我在解决如何将它应用到HTML表格时遇到了一些问题。下面是设置:使用LINQ to XML遍历HTML表格

<table class='inner' 
     width='100%'> 
    <tr> 
     <th>Area</th> 
     <th>Date</th> 
     <th>ID</th> 
     <th>Name</th> 
     <th>Email</th> 
     <th>Zip Code</th> 
     <th>Type</th> 
     <th>Amount</th> 
    </tr> 
    <tr> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
    </tr> 
    <tr> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
     <td>Data</td> 
    </tr> 
</table> 

本质上讲,有可能是行数之不尽,我希望能够去行由行相应检查数据。任何人都可以将我指向正确的方向吗?我应该使用LINQ以外的其他工具吗?

编辑:抱歉有关混乱,我的问题是,我试图收集数据的网页是HTML,而不是XML。确切的扩展名是“.aspx.htm”。这似乎没有正确加载,即使它不确定如何遍历HTML页面,因为有一张表在我尝试从中获取数据。

例如,下面是XPath表我试图从获取信息:

/html/body/form/div[3]/table/tbody/tr[5]/td/table 
+0

你可能需要修改你的问题。我没有看到上面描述中的路障是什么......导致答案成为使用.Elements()/ loop的变体,即使您提到您之前使用过linq to xml。 – eglasius 2010-09-13 17:52:51

+0

@eglasius是的,谢谢你的提示。我真的没有解释我的主要问题是什么。编辑。 – James 2010-09-13 21:01:12

回答

5
XElement myTable = xdoc.Descendants("table").FirstOrDefault(xelem => xelem.Attribute("class").Value == "inner"); 
IEnumerable<IEnumerable<XElement>> myRows = myTable.Elements().Select(xelem => xelem.Elements()); 

foreach(IEnumerable<XElement> tableRow in myRows) 
{ 
    foreach(XElement rowCell in tableRow) 
    { 
     // tada.. 
    } 
} 
1

一旦你有一个的XElement与<table>,你可以通过它的孩子Elements()循环。

0

linq就像sql一样执行基于集合的操作。

你要专注于使用foreach循环到选定的一组xelements的迭代 -