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

时间:2016-02-05 00:05:12

标签: php namespaces 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-&gt;孩子(&#39; ns5&#39;,true) - &gt; resource-&gt; id和我尝试​​的所有内容都给了我空的simplexml对象。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

  

$ elements =   $ XML-&GT;的xpath( '/ NS3:信息搜索结果/ NS3:资源/ NS5:资源');

xpath将返回一个数组,您可以从该数组中获取第一个项目。该项目的类型为SimpleXMLElement,您可以从attributes获取您的ID。

$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