Xpath:为每个特定元素获取特定的前一个兄弟节点

时间:2015-08-16 10:54:21

标签: php html dom xpath

以下是我的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>

我想为每个“menu_item”提供前面元素的H3“menu_item_title”。 所以对于前3个元素,我想找到剩下的“第一类标题”,我想要“第二类标题”。

在这个例子中,我只有两个类别,但实际上还有更多。

我尝试过这样的事情:

//div[contains(concat(" ", normalize-space(@class), " "), " menu_item ")]/preceding::h3[contains(concat(" ", normalize-space(@class), " "), " menu_items_title ")]

但它没有成功。

有人可以给我一些魔法吗?)?

1 个答案:

答案 0 :(得分:0)

  

&#34;我希望有一个输出3次的查询:第一类标题和6次:第二类标题&#34;

这不能只在纯XPath 1.0中完成,你需要一些PHP才能完成这项任务。一种可能的方法是执行首先返回div元素的XPath:

//div[contains(concat(" ", normalize-space(@class), " "), " menu_item ")]

...然后遍历结果并在每个div上执行以下相对XPath以获取相应的h3元素:

./preceding-sibling::h3[contains(concat(" ", normalize-space(@class), " "), " menu_item_title ")][1]
相关问题