Voici un extrait HTML: de: http://www.sphere-light.com/compatibility/maker/id/4/
<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>
Comment obtenir uniquement les 6 frères ul.ex
sœurs ul.ex
via <h3 class="my-subject">a</h3>
et obtenez les 6 ul
via <h3 class="my-subject">b</h3>
?
Étant donné que le nombre de balises <ul>
peut varier, voici quelques approches possibles.
Utilisation de 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
}
En général, je ne ferais pas tout en utilisant XPath seul mais en utilisant quelques LINQ également.
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
}