繁体   English   中英

Xpath:获取每个特定元素的特定先前同级

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM