2011-08-21 149 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]