簡體   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