假设XML具有以下结构:
<A>
<B>
<C>
<D name='title1'>
<E>
<F data='d1'>ON</F>
</E>
</D>
<D name='title2'>
<E>
<F data='d12'>ON</F>
</E>
</D>
</C>
</B>
</A>
如何根据“D”节点属性获得“F”节点输出? 有点像这样:
/A/B/C/D[@name='title1']/E/F
我可以根据其属性使用以下内容获取F节点:
$status = $lol->xpath("//n:F[@data='d1']");
echo "Status: " . $status[0] . "</br>";
我厌倦了将xpath的变体放到我想要的东西上,但没有运气。
想法?
答案 0 :(得分:1)
//D[@name='title1']//F
会给你<F data='d1'>ON</F>
//D[@name='title2']//F
应该给你<F data='d12'>ON</F>
答案 1 :(得分:1)
您的意思是“根据父D属性查找所有F?”
以下是“查找所有具有D-parent-node且'title'属性等于'title1'的F节点的示例:
$xml = <<<XML
<A>
<B>
<C>
<D name='title1'>
<E>
<F data='d1'>ON</F>
</E>
</D>
<D name='title1'>
<E>
<F data='d12'>ON</F>
</E>
</D>
</C>
</B>
</A>
XML;
$oXml = new SimpleXmlElement($xml);
var_dump($oXml->xpath("//D[@name='title1']//F"));
我希望这会对你有所帮助。
答案 2 :(得分:0)
我喜欢处理类型的XML文档的一种很简单的方法,类似于您尝试的$status[0]
,就像这样:
$status = $xml->xpath("//D");
echo $status[0]['name'] . " is " . $status[0]->E->F . "\r\n";
echo $status[1]['name'] . " is " . $status[1]->E->F . "\r\n";
输出:
title1 is ON
title2 is ON