據我所知,你不能用一個xpath表達式來做到這一點,但你需要循環結果。這種循環的示例:
$base = '';
foreach($xp->query('//@baseurl|//*[@baseurl]/x/@u') as $element) {
$value = $element->value;
if (substr($value, -1,1) === '/') {
$base = $value;
} else {
echo $base, $value, "\n";
}
}
有了您的示例XML文檔:
male/86644/lol.png
male/86644/haha.png
male/86644/name.png
male/27827/page.png
male/27827/examp.png
male/27827/bottom.png
這個例子是使用UNION運算符|
獲得一下子就想節點。
我最初想在xpath中做下面的事情,但不可能AFAIK。但是PHP可以照顧這個:運行在上下文中的XPath表達式到以前的XPath查詢節點:
$array = array_map(function($context) use($xp) {
return $xp->evaluate('concat(../../@baseurl, .)', $context);
}, iterator_to_array($xp->query('//x/@u')));
給$array
則:
Array
(
[0] => male/86644/lol.png
[1] => male/86644/haha.png
[2] => male/86644/name.png
[3] => male/27827/page.png
[4] => male/27827/examp.png
[5] => male/27827/bottom.png
)
這可能是更直截了當。
只需要xpath和每個都需要。 –