我如何获得所有同级ul标签?

问题描述:

下面是一个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

由于<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