2011-08-21 140 views
3

比方說,我有這樣的:DOMXPath得到兄弟依賴於前面的兄弟姐妹值

<foo> 
    <bar>CCC</bar> 
    <baz>sometexthere</baz> 
</foo> 
<foo> 
    <bar>AAA</bar> 
    <baz>sometext</baz> 
</foo> 
<foo> 
    <bar>DDD</bar> 
    <baz>something</baz> 
</foo> 

現在,我希望得到巴茲值,這是未來之後酒吧與價值AAA (!但僅限於值AAA!)。我不知道有多少「富」 S我有,所以我不能準確地寫出類似:

$element->item(0) // I don't know the exact number 

所以,我怎麼能得到巴茲的價值,與特定值欄之後,如下?

(對於上面的例子,我想獲得sometext因爲它是後AAA

回答

2

一個基本的查詢將找到包含AAAbar S,然後導航到相應的baz元件。

//foo/bar[.="AAA"]/../baz 

或者,找到基於相關bar所有baz和過濾。

//foo/baz[../bar = "AAA"] 
內含有具有 AAA bar foo小號

或者,baz秒。

//foo[bar="AAA"]/baz 

如果您不熟悉XPath表達式,請稍後再使用書籤XML Path Language (XPath)

6

根據您希望如何執行匹配,有不同的方法來編寫匹配的XPath。這裏有一些選擇:

查找巴茲那裏也是一個<bar>AAA</bar>,不一定雖然它前面(可以來後,還是有可能在與其他元素):

foo[bar = 'AAA']/baz 

發現前面有一個巴茲通過<bar>AAA</bar>

foo/baz[preceding-sibling::bar = 'AAA'] 
foo/bar[. = 'AAA']/following-sibling::baz 

查找巴茲立即前面加<bar>AAA</bar>

foo/baz[preceding-sibling::*[1]/self::bar = 'AAA'] 
foo/bar[. = 'AAA']/following-sibling::*[1]/self::baz 

找到一個<bar>AAA</bar>並返回緊隨其後的任何元素,不一定命名爲baz。

foo/bar[. = 'AAA']/following-sibling::*[1]