好吧让我说我有一些这样的XML ......
<blaah1 name="whatever">
<gender name="male">
<example1 baseurl="male/86644/">
<x u="lol.png"/>
<x u="haha.png"/>
<x u="name.png"/>
</example1>
<example2 baseurl="male/27827/">
<x u="page.png"/>
<x u="examp.png"/>
<x u="bottom.png"/>
</example2>
</gender>
</blaah1>
我需要做些什么才能在每个孩子的父母u=""
的末尾显示baseurl
内容?
答案 0 :(得分:1)
据我所知,你不能用单个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
)
这可能更直接。
答案 1 :(得分:0)
如果您为每个名为 baseid 的孩子添加额外元素,并将其内容添加为父母姓名,如下所示。 。
<blaah1 name="whatever">
<gender name="male">
<example1 baseurl="male/86644/">
<x u="lol.png" baseid="example1"/>
<x u="haha.png" baseid="example1"/>
<x u="name.png" baseid="example1"/>
</example1>
<example2 baseurl="male/27827/">
<x u="page.png" baseid="example2"/>
<x u="examp.png" baseid="example2"/>
<x u="bottom.png" baseid="example2"/>
</example2>
</gender>
</blaah1>
你可以通过以下两个xpath获得父母 baseurl 和孩子你
$xml_load = simplexml_load_file("myxmlfile.xml");
$x = $xml_load->xpath('//gender[@name="male"]/*/x');
foreach($x as $display)
{
$base_url = $xml_load->xpath('//gender[@name="male"]/'.$display["baseid"].'');
foreach($base_url as $base)
{
echo 'img: '. $base['baseurl'] . $display['u'],'<hr>';
}
}
完成输出。 。
img: male/86644/lol.png
img: male/86644/haha.png
img: male/86644/name.png
img: male/27827/page.png
img: male/27827/examp.png
img: male/27827/bottom.png