2011-12-10 42 views
0

我有一個字符串,其中包含來自網頁的HTML代碼。在我感興趣的代碼中有一張表。我想解析表格單元格中的數字,並將它們放入文本框中,每個數字放在它自己的文本框中。這裏是表格:從表格單元格解析數據/數字C#或VisualBasic

<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敏捷包或類似的東西,但我還沒有很好的想法如何自己做,所以我需要你的幫助。

+0

是,HTML敏捷性包將是一個不錯的選擇。你甚至*試過*使用它?你目前有什麼代碼? –

+0

所以你更喜歡Regex解決方案的問題? – Josh

+0

我試過RegularExpressions。我沒有足夠的積分來發布任何代碼。 @Josh:並不是我更喜歡這個或那個,我希望它能夠工作,只是嘗試了一些東西,我認爲這不能用正則表達式來完成。 – Tomo84

回答

0

您的HTML示例也恰好是良好的XML。你可以使用任何.net的XML讀/解析技術。

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]; 
}