使用 PHP SimpleXML 发出解析名称空间

Issue parsing namespaces using PHP SimpleXML

我有这个xml内容:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns3:searchResult total="1" xmlns:ns5="ers.ise.cisco.com" xmlns:ers-v2="ers-v2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns3="v2.ers.ise.cisco.com">
<ns3:resources>
<ns5:resource id="42e98860-cb88-11e5-9b0c-000c29c658fa" name="11:22:33:44:55:66">
<link rel="self" href="https://1.2.3.4:9060/ers/config/endpoint/42e98860-cb88-11e5-9b0c-000c29c658fa" type="application/xml"/>
</ns5:resource>
</ns3:resources>
</ns3:searchResult>

我需要获取 ns5:resource id 值 (42e98860-cb88-11e5-9b0c-000c29c658fa) 的值,但是在每个节点中使用命名空间让我感到困惑,我尝试使用 $xml->children('ns5',true)->resource->id 和我尝试的一切都给我空的简单 xml 对象。

有什么建议吗?

我认为你可以使用这个 xpath 表达式:

$elements = $xml->xpath('/ns3:searchResult/ns3:resources/ns5:resource');

xpath 将 return 一个数组,您可以从该数组中取出第一项。该项目的类型为 SimpleXMLElement and you can get your id from its attributes

$source = <<<SOURCE
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns3:searchResult total="1" xmlns:ns5="ers.ise.cisco.com" xmlns:ers-v2="ers-v2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns3="v2.ers.ise.cisco.com">
<ns3:resources>
<ns5:resource id="42e98860-cb88-11e5-9b0c-000c29c658fa" name="11:22:33:44:55:66">
<link rel="self" href="https://1.2.3.4:9060/ers/config/endpoint/42e98860-cb88-11e5-9b0c-000c29c658fa" type="application/xml"/>
</ns5:resource>
</ns3:resources>
</ns3:searchResult>
SOURCE;

$xml = simplexml_load_string($source);
$elements = $xml->xpath('/ns3:searchResult/ns3:resources/ns5:resource');
$element = $elements[0];
echo $element->attributes()->id->__toString();

将导致:

42e98860-cb88-11e5-9b0c-000c29c658fa