[英]Xpath : Get specific preceding siblings for each specific element
这是我的HTML的格式:
<div class="menu">
<h3 class="menu_item_title">Title of first category</h3>
<div class="menu_item">Item 1</div>
<div class="menu_item">Item 2</div>
<div class="menu_item">Item 3</div>
<h3 class="menu_item_title">Title of second category</h3>
<div class="menu_item">Item 4</div>
<div class="menu_item">Item 5</div>
<div class="menu_item">Item 6</div>
<div class="menu_item">Item 7</div>
<div class="menu_item">Item 8</div>
<div class="menu_item">Item 9</div>
</div>
我希望每个H3的“ menu_item_title”元素前面都有元素。 因此,对于前三个元素,我想为其余的元素找到“第二类标题”。
在此示例中,我只有两个类别,但实际上不止于此。
我试图做类似的事情:
//div[contains(concat(" ", normalize-space(@class), " "), " menu_item ")]/preceding::h3[contains(concat(" ", normalize-space(@class), " "), " menu_items_title ")]
但没有成功。
有人可以给我发送一些魔法吗?)?
我不确定您是否希望多次获得每个h3
元素的结果(对于以下每个menu_item
一次),还是仅一次,但是对于后者,以下XPath
//div[@class='menu_item']/preceding::h3[@class='menu_item_title']
产生结果
<h3 class="menu_item_title">Title of first category</h3>
<h3 class="menu_item_title">Title of second category</h3>
注意,同样,当你调整你这里有错字在你的问题中提到的方法将有同样的结果: menu_items_title
应该menu_item_title
在部分preceding::h3[contains(concat(" ", normalize-space(@class), " "), " menu_items_title ")]
“我想有一个输出3次的查询:第一类标题和6次:第二类标题”
仅在纯XPath 1.0中无法做到这一点,您需要一些PHP才能完成此任务。 一种可能的方法是执行XPath,该XPath首先返回div
元素:
//div[contains(concat(" ", normalize-space(@class), " "), " menu_item ")]
...然后遍历结果,并在每个div
上执行以下相对XPath以获得相应的h3
元素:
./preceding-sibling::h3[contains(concat(" ", normalize-space(@class), " "), " menu_item_title ")][1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.