PHP在简单XML对象中查找值
我有一个包含多个值的PHP简单XML对象 我试图在对象中定位一个特定的PHP在简单XML对象中查找值,php,xml,Php,Xml,我有一个包含多个值的PHP简单XML对象 我试图在对象中定位一个特定的QID,并找出相应的角色 例如: SimpleXMLElement Object ( [data] => Array ( [0] => SimpleXMLElement Object ( [QID] => Q5678 [Role] => Supe
QID
,并找出相应的角色
例如:
SimpleXMLElement Object
(
[data] => Array
(
[0] => SimpleXMLElement Object
(
[QID] => Q5678
[Role] => Super Admin
)
[1] => SimpleXMLElement Object
(
[QID] => Q1234
[Role] => Super Admin
)
)
)
我真的找不到任何东西可以让我像在JavaScript中那样以这种方式搜索对象
有没有办法说(Psuedo代码):getRole('Q1234')代码>//输出超级管理员
如果需要,我可以更改此输出的结构,但更重要的是,我希望验证是否可以找到此“大海捞针”。您必须使用自定义函数。您可以使用如下函数
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");
您必须使用自定义函数。您可以使用如下函数
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");
使用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]
);
表达式//data
获取文档中的任何data
元素节点[QID=“Q1234”]
是一种条件,它将结果限制为具有内容为Q1234
的QID
子节点的元素。添加/Role
将获取该筛选节点列表的Role
子节点
结果是一个SimpleXMLElement对象数组,因此需要获取数组的第一个元素并将其转换为字符串
在DOM中,可以直接获取字符串:
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
var_dump(
$xpath->evaluate('string(//data[QID="Q1234"]/Role)')
);
使用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]
);
表达式//data
获取文档中的任何data
元素节点[QID=“Q1234”]
是一种条件,它将结果限制为具有内容为Q1234
的QID
子节点的元素。添加/Role
将获取该筛选节点列表的Role
子节点
结果是一个SimpleXMLElement对象数组,因此需要获取数组的第一个元素并将其转换为字符串
在DOM中,可以直接获取字符串:
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
var_dump(
$xpath->evaluate('string(//data[QID="Q1234"]/Role)')
);
foreach(数据)
?foreach(数据)
?