从表格单元格C#或VisualBasic中解析数据/数字

时间:2011-12-10 19:16:07

标签: c# asp.net vb.net parsing html-table

我有一个字符串,其中包含来自网页的HTML代码。我感兴趣的代码中有一个表。我想解析表格单元格中的数字并将它们放在文本框中,每个数字都在自己的文本框中。这是表格:

<table class="tblSkills">
    <tr>
        <th class="th_first">Strength</th><td class="align_center">15</td>
        <th>Passing</th><td class="align_center">17</td>
    </tr>
    <tr>
        <th class="th_first">Stamina</th><td class="align_center">16</td>
        <th>Crossing</th><td class="align_center"><img src='/pics/star.png' alt='20' title='20' /></td>
    </tr>
    <tr>
        <th class="th_first">Pace</th><td class="align_center"><img src='/pics/star_silver.png' alt='19' title='19' /></td>
        <th>Technique</th><td class="align_center">16</td>
    </tr>
    <tr>
        <th class="th_first">Marking</th><td class="align_center">15</td>
        <th>Heading</th><td class="align_center">10</td>
    </tr>
    <tr>
        <th class="th_first">Tackling</th><td class="align_center"><span class='subtle'>5</span></td>
        <th>Finishing</th><td class="align_center">15</td>
    </tr>
    <tr>
        <th class="th_first">Workrate</th><td class="align_center">16</td>
        <th>Longshots</th><td class="align_center">8</td>
    </tr>
    <tr>
        <th class="th_first">Positioning</th><td class="align_center">18</td>
        <th>Set Pieces</th><td class="align_center"><span class='subtle'>2</span></td>
    </tr>
</table>

正如您所看到的,有14个数字。更糟糕的是,像19和20这样的数字被图像取代,而低于6的数字则具有跨度等级。 我知道我可以使用HTML敏捷包或类似的东西,但我自己还没有那么好的方法来解决这个问题,所以我需要你的帮助。

2 个答案:

答案 0 :(得分:0)

您的HTML示例也恰好是优秀的XML。您可以使用任何.net的XML读取/解析技术。

答案 1 :(得分:0)

在C#中使用LINQ to XML:

var doc = XDocument.Parse(yourHtml);

var properties = new List<string>(
    from th in doc.Descendants("th")
    select th.Value);

var values = new List<int>(
    from td in doc.Descendants("td")
    let img = td.Element("img")
    let textValue = img == null ? td.Value : img.Attribute("alt").Value
    select int.Parse(textValue));

var dict = new Dictionary<string, int>();
for (var i = 0; i < properties.Count; i++)
{
    dict[properties[i]] = values[i];
}