我如何获得所有同级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
}
THX,但UL的数量不会永远是6,7也许.... – dfang 2012-02-16 09:14:13
那不是你的问题说...;)这很好,甚至更好,因为我可以告诉你如何在这里使用一些LINQ来做到这一点。 – 2012-02-16 13:45:35
谢谢,它的工作原理 – dfang 2012-02-17 04:06:01