XMLドキュメントで、同じ名前を共有する要素がありますが、属性の値はそれがどのタイプのデータであるかを定義し、ドキュメントから特定の値を持つ要素をすべて選択したいと思います。 XPathを使用する必要がありますか(使用している場合は、正しい構文を提案できますか)、それともよりエレガントなソリューションがありますか?
次に、XMLの例をいくつか示します。
<object>
<data type="me">myname</data>
<data type="you">yourname</data>
<data type="me">myothername</data>
</object>
そして、タイプがme
である<data>
のすべての<object>
タグの子のコンテンツを選択します。
PS-私はPHPを使用してNetflix APIとインターフェイスしようとしています-これは私の質問には関係ないはずですが、そうするために良い/より良い方法を提案したい場合は、 mすべての耳。
このXPathを試してください:
/object/data[@type="me"]
そう:
$myDataObjects = $simplexml->xpath('/object/data[@type="me"]');
また、object
がドキュメントのルートでない場合は、代わりに//object/data[@type="me"]
を使用してください。
これを行うための関数を作成しました。ただし、最初の結果のみを取得します。あなたのマイレージは異なる場合があります。
function query_attribute($xmlNode, $attr_name, $attr_value) {
foreach($xmlNode as $node) {
switch($node[$attr_name]) {
case $attr_value:
return $node;
}
}
}
使用法:
echo query_attribute($MySimpleXmlNode->Customer, "type", "human")->Name;
(以下のXMLの場合)
<Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>