使用LINQ to XML遍历HTML表

时间:2010-09-13 16:56:35

标签: c# html xml linq linq-to-xml

因此,我可以轻松地使用LINQ to XML来遍历正确设置的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

3 个答案:

答案 0 :(得分: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 :(得分:1)

获得带有<table>的XElement后,您可以循环显示其子Elements()

答案 2 :(得分:0)

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

您希望专注于使用foreach循环迭代所选的xelements集合 -