2014-01-29 102 views
1

假設一個XML結構如下子值:的XPath:獲取基於父屬性

<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的變化來獲得我想要的,但沒有運氣。

想法?

回答

1
//D[@name='title1']//F 

會給你<F data='d1'>ON</F>

//D[@name='title2']//F 

應該給你<F data='d12'>ON</F>

1

你的意思是 「查找所有的F基於父d的屬性?」

這裏是例子「查找具有d-父節點與所有的F節點‘標題’屬性等於‘TITLE1’:

$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")); 

我希望這會爲你有所幫助

0

一個漂亮的簡單的方法,我喜歡對付一種XML文檔,類似於您嘗試$status[0]的,是這樣的:

working example

$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