2012-02-15 166 views
0

下面是一個HTML片段: 來自:http://www.sphere-light.com/compatibility/maker/id/4/我如何獲得所有同級ul標籤?

<h3 class="my-subject">a</h3> 

<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 

<h3 class="my-subject">b</h3> 

<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 
<ul class='ex'>....</ul> 

我怎樣才能得到公正的ul.ex通過<h3 class="my-subject">a</h3>

6個兄弟姐妹,並通過<h3 class="my-subject">b</h3>得到下一個6 ul

回答

1

由於<ul>標籤的數量可能有所不同,因此可以採用幾種方法。

使用XPath:

var h3Xpath = "//h3[@class='my-subject']"; 
var query = doc.DocumentNode.SelectNodes(h3Xpath); 
foreach (var h3 in query) 
{ 
    var value = h3.InnerText; 
    var ulXpathFmt = "following-sibling::ul[@class='ex' and " + 
     "preceding-sibling::h3[@class='my-subject'][1]='{0}']"; 
    var uls = h3.SelectNodes(String.Format(ulXpathFmt, value)); 
    // do something with the uls 
} 

我一般不會使用XPath,但單獨使用LINQ的一些以及混合做這一切。

var h3Xpath = "//h3[@class='my-subject']"; 
var query = doc.DocumentNode.SelectNodes(h3Xpath); 
foreach (var h3 in query) 
{ 
    var ulXpath = "following-sibling::*"; 
    var uls = h3.SelectNodes(ulXpath) 
     .TakeWhile(tag => tag.Name == "ul" && 
          tag.Attributes["class"].Value == "ex"); 
    // do something with the uls 
} 
+0

THX,但UL的數量不會永遠是6,7也許.... – dfang 2012-02-16 09:14:13

+0

那不是你的問題說...;)這很好,甚至更好,因爲我可以告訴你如何在這裏使用一些LINQ來做到這一點。 – 2012-02-16 13:45:35

+0

謝謝,它的工作原理 – dfang 2012-02-17 04:06:01

相關問題