2016-12-07 4 views
0

私はPHPの単純なXMLオブジェクトに複数の値を持っています。PHP単純なXMLオブジェクトで値を見つける

私はオブジェクト内の特定のQIDをターゲットにして、対応するRoleを見つけようとしています。

例:

SimpleXMLElement Object 
(
    [data] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [QID] => Q5678 
        [Role] => Super Admin 
       ) 

      [1] => SimpleXMLElement Object 
       (
        [QID] => Q1234 
        [Role] => Super Admin 
       ) 

     ) 

) 

私は本当に私はJavaScriptでできるように私はこの方法でオブジェクトを検索できる何かを見つけることができませんでした。 getRole('Q1234'); //出力スーパー管理

私が必要な場合は、この出力の構造を変更することができていますが、より多くのように、「私はこれを見つけることができます検証を探して:

ことは言うにする方法(擬コード)が存在することになります「干し草の針」と言います。

+0

'foreachの(データを)'? –

答えて

1

カスタム機能を使用する必要があります。あなたはそれがあなたの役割を返します

function find_role($object, $id) { 
    foreach ($object->data as $inside_object) { 
     if ($id == $inside_object->QID) { 
      return $inside_object->Role; 
     } 
    } 
return false; 

}

を以下のようのような機能を使用することができます。

echo find_role($object, "Q5678"); 
2

Xpathを使用して印刷することができます。これは、場所パス(条件を含む)を使用してDOMの一部をフェッチできるようにする式言語です。機能が制限されているSimpleXMLでは、SimpleXMLElement::xpath()は常にSimpleXMLElementオブジェクトの配列を返します。

$xml = <<<'XML' 
<roles> 
    <data> 
    <QID>Q5678</QID> 
    <Role>Super Admin</Role> 
    </data> 
    <data> 
    <QID>Q1234</QID> 
    <Role>Standard User</Role> 
    </data> 
</roles> 
XML; 

$roles = new SimpleXMLElement($xml); 

var_dump(
    (string)$roles->xpath('//data[QID="Q1234"]/Role')[0] 
); 

出力:

string(13) "Standard User" 

発現//dataは、文書内の任意のdata要素ノードを取り出します。 は、内容がQ1234QID子ノードの要素に結果を限定する条件です。 /Roleを追加すると、そのフィルタリングされたノードリストの子ノードがRoleフェッチされます。

結果はSimpleXMLElementオブジェクトの配列なので、配列の最初の要素をフェッチして文字列にキャストする必要があります。 DOMでは

あなたは直接文字列を取得できます。

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath = new DOMXpath($document); 


var_dump(
    $xpath->evaluate('string(//data[QID="Q1234"]/Role)') 
); 
関連する問題