2014-05-09 33 views
0
<tr id='tr1' align='center' border=0 class='headerclass'> 
    Example text 
    <tr id='tr11' align='center' border=0 bgColor='99ccff'> 
    <td id='td1' class='headerclass'>Example Header 1 </td> 
    <td id='td2' class='headerclass'>Example Header 2 </td> 
    <td id='td3' class='headerclass'>Example Header 3 </td> 
    </tr> 
    <tr id='tr12' align='center"'bgColor='white'> 
    <td id='v1' class='colclass'>value 1</td> 
    <td id='v2' class='colclass'>value 2</td> 
    <td id='v3' class='colclass'>value 3</td> 
    </tr> 
</tr> 

以上是我想刮掉的HTML示例。我想獲得示例文本這是<tr></tr>。我嘗試使用InnerText(代碼如下所示),但它將<td></td>中的所有文本都返回給我,這也不是我想要的。我想獲得示例文本而已。Html敏捷包:如何刮<tr>文本?

var nodes = htmlDoc.DocumentNode.SelectNodes("//tr").Where(x => x.Attributes["id"] != null && x.Attributes["id"].Value.Contains("tr1")); 
foreach (var htmlNode in nodes) 
{ 
    Console.WriteLine(htmlNode.InnerText); 
} 

輸出:

Example text 
Example Header 1 
Example Header 2 
Example Header 3 
value 1 
value 2 
value 3 

謝謝。

+0

我不認爲這是有效的HTML(http://www.w3.org/TR/ html5/tabular-data.html#the-tr-element),所以任何HTML解析器對它的響應都可能是未定義的。 – David

回答

1

你可以做這樣的事情:

var text = doc.DocumentNode.Descendants("tr") 
       .First(p => p.Attributes["id"] != null && 
       p.Attributes["id"].Value.Contains("tr1")).ChildNodes[0].InnerText.Trim(); 

輸出是:

Example text 
+0

謝謝你!有用。非常感謝。 – CNLSH