在XML文档中,我有共享相同名称的元素,但属性的值定义了它的数据类型,我想从文档中选择所有具有特定值的元素。我是否需要使用XPath(如果是这样,您能建议正确的语法)还是有更优雅的解决方案?
以下是一些XML示例:
<object>
<data type="me">myname</data>
<data type="you">yourname</data>
<data type="me">myothername</data>
</object>
我想选择所有<data>
个<object>
代码类型为me
的{{1}}个孩子的内容。
PS - 我正在尝试使用PHP与Netflix API进行交互 - 这对我的问题无关紧要,但是如果你想建议一个好的/更好的方法,那我就听见了。
答案 0 :(得分:46)
试试这个XPath:
/object/data[@type="me"]
所以:
$myDataObjects = $simplexml->xpath('/object/data[@type="me"]');
如果object
不是您文档的根,请改用//object/data[@type="me"]
。
答案 1 :(得分:4)
我刚刚为我做了一个功能;它只抓住了第一个结果。您的里程可能会有所不同。
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>