![](/img/trans.png)
[英]php xpath query to get parent node based on value in repeating child nodes
[英]XPath: get child value based on parent attribute
假設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的變體來獲得我想要的東西,但是沒有運氣。
想法?
//D[@name='title1']//F
會給你<F data='d1'>ON</F>
//D[@name='title2']//F
應該給你<F data='d12'>ON</F>
您的意思是“根據父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"));
希望對您有幫助。
我喜歡處理一種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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.