2011-09-18 67 views
2

我是新來的HTML敏捷包,我還沒有想出如何可以解析下面的代碼塊:產生的Html敏捷包獲得特定內容的雙DIV中

<p> 
    <div class='myclass1'> 
     <div id='idXXXX'>content1<br>content2 
     </div> 
     <div class="myclass2"> 
      <table> 
       <tr> 
        <td align="left">content3 <b><a href="">content4</a></b></td> 
        <td align="right">content5 <b><a href="">content6</a></b></td> 
       </tr> 
      </table> 
     </div> 
    </div> 
</p> 

XXXX是一個隨機的數。

我有加載HTML文檔的所有代碼。

我想從上面的代碼是獲取content1和content2並在不同的查詢內容4。

回答

3
var doc = new HtmlDocument(); 
doc.Load("test.htm"); 
var res = doc.DocumentNode.SelectSingleNode("//div[@class='myclass1']"); 
var firstDiv = res.SelectSingleNode("div"); 
var content1 = firstDiv.ChildNodes[0].InnerText.Trim(); 
var content2 = firstDiv.ChildNodes[2].InnerText.Trim(); 
var content4 = res.SelectSingleNode(".//div[@class='myclass2']") 
        .SelectSingleNode(".//td[@align='left']/b/a") 
        .InnerText 
        .Trim(); 

UPDATE:

如果你有一個給定的類的多個div的,你想爲他們每個人可以做到這一點的內容相匹配:

var doc = new HtmlDocument(); 
doc.Load("test.htm"); 
var res = doc.DocumentNode.SelectNodes("//div[@class='myclass1']"); 
foreach (var item in res) 
{ 
    var firstDiv = item.SelectSingleNode("div"); 
    var content1 = firstDiv.ChildNodes[0].InnerText.Trim(); 
    var content2 = firstDiv.ChildNodes[2].InnerText.Trim(); 
    var content4 = item.SelectSingleNode(".//div[@class='myclass2']") 
         .SelectSingleNode(".//td[@align='left']/b/a") 
         .InnerText 
         .Trim(); 
} 
+0

如果我想將它添加到foreach語句我怎麼可以修改它?因爲我有幾個div類「myclass1」 –

+0

@Alexander Talavari,我已經更新了我的答案以顯示一個示例。 –

+0

因爲某些原因,當我在第一個循環運行代碼時,它返回content1和content2,然後var content1 = item.ChildNodes [0] .InnerText.Trim();獲取我的content3 + content4 + content5 + content6字符串和var content2 = item.ChildNodes [2] .InnerText.Trim();拋出一個System.ArgumentOutOfRangeExeption。另外我怎樣才能得到內容4在與內容1和2相同的foreach循環?因爲content4標記內容1和內容2的內容。非常感謝您回答 –