我有一个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');
//输出超级管理员
如果需要,我可以更改此输出的结构,但更多的是查找验证,我可以找到这个“大海捞针”可以这么说。
答案 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");