2017-03-02 14 views
0

と上記複数のレベル上の親を見つける:(名前は架空です)シンプルなXML私はこのようなXMLファイルを持っているPHP

<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をを使用して、私は私が得ることができる方法を見つけ出すことはできません1つ以上のレベルの親。例えば

私は<childItemLevel2>Value 10</childItemLevel2>でいます。

<item>にアクセスして印刷するにはどうすればよいですか?

ありがとうございます。

答えて

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]は、そのリストから最初の(最も近い)を選択します。

関連する問題