我有一个看起来像这样的xml文件:(名字是虚构的)
<base>
<subbase>
<item>
<childItem>
<childItemLevel1>
<childItemLevel2>Value 1 </childItemLevel2>
<childItemLevel2>Value 2 </childItemLevel2>
<childItemLevel2>Value 3 </childItemLevel2>
</childItemLevel1>
<childItemLevel1>
<childItemLevel2>Value 10 </childItemLevel2>
<childItemLevel2>Value 20 </childItemLevel2>
<childItemLevel2>Value 30 </childItemLevel2>
</childItemLevel1>
</childItem>
</item>
</subbase>
</base>
我使用SimpleXML,我无法弄清楚如何在多个级别上获取父级。
例如:
我在<childItemLevel2>Value 10</childItemLevel2>
。
如何联系到父<item>
并将其打印出来?
提前致谢。
答案 0 :(得分:1)
使用Xpath轴。
$base = new SimpleXMLElement($xml);
$child = $base->xpath('.//childItemLevel2[contains(., "Value 10")]')[0];
var_dump($child->asXml());
$parent = $child->xpath('ancestor::item[1]')[0];
var_dump($parent->asXml());
输出:
string(44) "<childItemLevel2>Value 10 </childItemLevel2>"
string(484) "<item>
<childItem>
<childItemLevel1>
<childItemLevel2>Value 1 </childItemLevel2>
<childItemLevel2>Value 2 </childItemLevel2>
<childItemLevel2>Value 3 </childItemLevel2>
</childItemLevel1>
<childItemLevel1>
<childItemLevel2>Value 10 </childItemLevel2>
<childItemLevel2>Value 20 </childItemLevel2>
<childItemLevel2>Value 30 </childItemLevel2>
</childItemLevel1>
</childItem>
</item>"
ancestor
是一个轴,它包含层次结构中文档元素节点的任何节点。 ancestor::item
将在此轴上选择任何名为item
的内容。 ancestor::item[1]
选择该列表中的第一个(最近的)。