我有以下XML代码
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0">
<epp:response>
<epp:result code="1000">
<epp:msg>Contact Info Command completed successfully</epp:msg>
</epp:result>
<epp:resData>
<contact:infData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>con12</contact:id>
<contact:status s="ok"/>
<contact:postalInfo type="loc">
<contact:name>Name</contact:name>
<contact:org/>
<contact:addr>
<contact:street>streer</contact:street>
<contact:street>street</contact:street>
<contact:street/>
<contact:city>City</contact:city>
<contact:sp/>
<contact:pc>186</contact:pc>
<contact:cc>AA</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>0000000</contact:voice>
<contact:fax>000000000</contact:fax>
<contact:email>support@email.com</contact:email>
</contact:infData>
</epp:resData>
</epp:response>
</epp:epp>
我在使用simplexml_load_string
从XML字符串中获取值时遇到了困难我可以从epp开始的所有节点中获得结果:例如epp:msg uinsg以下代码
$objects = simplexml_load_string($result);
$objects->children('epp', true)->response->result->msg;
我似乎无法获得以下值
<contact:infData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<contact:id>con12</contact:id>
<contact:status s="ok"/>
<contact:postalInfo type="loc">
<contact:name>Name</contact:name>
<contact:org/>
<contact:addr>
<contact:street>streer</contact:street>
<contact:street>street</contact:street>
<contact:street/>
<contact:city>City</contact:city>
<contact:sp/>
<contact:pc>186</contact:pc>
<contact:cc>AA</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>0000000</contact:voice>
<contact:fax>000000000</contact:fax>
<contact:email>support@email.com</contact:email>
</contact:infData>
我还需要知道如何在<epp:result code="1000">
任何帮助/指示都将不胜感激,
答案 0 :(得分:2)
你有99%的路(除非我遗漏了什么)。基本上,只要您想要“更改”命名空间,就可以使用->children()
或->attributes()
方法。
所以你可以说$objects->children('epp', true)->response->result->resData->children('contact', true)->infData->id
code
中的<epp:result code="1000">
属性为technically not in any namespace at all,因此您必须选择NULL命名空间才能访问它:$objects->children('epp', true)->response->result->attributes(NULL)->code
。
不要忘记,通过使用别名('epp','contact'),你依赖于不改变它们的数据源,它们在技术上可以不改变文件的“含义”。为了防范这种情况,您必须对URI(urn:ietf:params:xml:ns:epp-1.0
和urn:ietf:params:xml:ns:contact-1.0
)进行硬编码。
答案 1 :(得分:1)
你快到了。以类似的方式访问更深层的元素:
$contact = $objects->children('epp', true)->response->resData->children('contact',tee);
$name = $contact->infData->postalInfo->name;
对于代码值,我假设您的意思是<epp:result code="1000">
$resultAttributes = $objects->children('epp', true)->response->result->attributes();
$code = $resultAttributes['code'];
注意:$ name和$ code最终都是SimpleXMLElements而不是字符串,但你可以将它们转换为字符串:
$a = (string)$name;