据我所知,您不能使用单个 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
此示例使用联合运算符|
一次获取所有想要的节点。
我最初想在 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
)
这可能更直接。