PHP在简单XML对象中查找值

时间:2016-12-07 18:48:13

标签: php xml

我有一个PHP Simple XML Object,里面有多个值。

我正在尝试定位对象中的特定QID并找出相应的Role

示例:

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

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

        )

)

我无法找到任何允许我以这种方式搜索对象的东西,就像我在JavaScript中一样。

有没有办法说出来(Psuedo Code):getRole('Q1234'); //输出超级管理员

如果需要,我可以更改此输出的结构,但更多的是查找验证,我可以找到这个“大海捞针”可以这么说。

2 个答案:

答案 0 :(得分: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元素节点。 [QID="Q1234"]是将结果限制为具有内容为QID的{​​{1}}子节点的元素的条件。添加Q1234将获取该已过滤节点列表的/Role子节点。

结果是一个SimpleXMLElement对象数组,因此您需要获取数组的第一个元素并将其转换为字符串。

在DOM中,您可以直接获取字符串:

Role

答案 1 :(得分: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");