Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在简单XML对象中查找值_Php_Xml - Fatal编程技术网

PHP在简单XML对象中查找值

PHP在简单XML对象中查找值,php,xml,Php,Xml,我有一个包含多个值的PHP简单XML对象 我试图在对象中定位一个特定的QID,并找出相应的角色 例如: SimpleXMLElement Object ( [data] => Array ( [0] => SimpleXMLElement Object ( [QID] => Q5678 [Role] => Supe

我有一个包含多个值的PHP简单XML对象

我试图在对象中定位一个特定的
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(数据)