2017-03-20 3 views
0

PHPを使用して次の例でdistNameを取得する方法はありますか?XMLでdistNameを検索

$nodes = $finder->query("//*[contains(@name, 'c')]"); 
foreach ($nodes as $node) { 
    echo " {$node->parentNode->nodeName}\n"; 
} 

をしかし、私は唯一の 'managedObject' を取得:

<managedObject class="class" version="version" distName="distName" id="id"> 
    <defaults name="name"/> 
    <p name="a">Some data</p> 
    <p name="b">Some data</p> 
    <p name="c">Some data</p> 
    <p name="d">Some data</p> 
    <p name="e">Some data</p> 

は、これまでのところ、私はこれを使用して、それを取得しようとしました。

助けが必要です。

+0

あなたはどのようなライブラリを使用しているの?構造は動的か? –

答えて

0

//*[contains(@name, 'c')]"は、値がcnameという属性を持つ要素ノードをすべて取り出します。

$node->parentNode->nodeNameは、ノードの親のノード名をフェッチします。あなたの質問のノード名はmanagedObjectです。親ノードの属性distNameを取得するには、次の2つの解決策があります。

使用DOMElementの::のgetAttribute():

echo $node->parentNode->getAttribute('distName'), "\n"; 

またはXPath式を変更し、distName属性ノードフェッチ:

$nodes = $finder->evaluate("//*[contains(@name, 'c')]/parent::managedObject/@distName"); 
foreach ($nodes as $attribute) { 
    echo " {$attribute->value}\n"; 
} 
+0

ありがとうございます。出来た。 –