2012-02-15 13 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> 

どのように私は<h3 class="my-subject">a</h3>

を経由してわずか6人の兄弟ul.exを取得し、<h3 class="my-subject">b</h3>を介して次の6 ulを得ることができますか?

答えて

1

ここでは、<ul>タグの数が変わる可能性があるため、いくつかのアプローチがあります。

のXPathの使用:私は、一般的にも、いくつかのLINQを使用してだけではなく、混合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 
} 

を。

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

+0

ご質問には言っていないのです...;)それは私があなたを見ることができるので、より良い、大丈夫ですここでいくつかのLINQを使ってそれを行う方法。 –

+0

ありがとう、それは動作します – dfang

関連する問題