我需要访问位于XML文档中嵌套命名空间内的属性的值。以下是XML的示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epp:epp xmlns:epp="urn:ietf:params:xml:ns:epp-1.0">
<epp:response>
<epp:result code="1000">
<epp:msg>Domain Check Command completed successfully</epp:msg>
</epp:result>
<epp:msgQ count="4" id="OTE-EPP-155DF5E824E-1BC86"/>
<epp:resData>
<domain:chkData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:cd>
<domain:name avail="1">example.com</domain:name>
</domain:cd>
</domain:chkData>
</epp:resData>
<epp:trID>
<epp:clTRID>123</epp:clTRID>
<epp:svTRID>456</epp:svTRID>
</epp:trID>
</epp:response>
</epp:epp>
在上面,我需要访问&#34; avail&#34;我可以收集的属性位于epp命名空间内的嵌套命名空间域中。
我使用simplexml_load_string($ xml)来访问属性。我能够访问epp命名空间,但是我缺乏XML知识使我失败了:)
提前谢谢!
修改
由于问题被标记为重复,我想清除我正在寻找位于嵌套命名空间内的属性的值。
我试图通过xpath访问该属性,但只接收到未定义的名称空间前缀错误:
echo $data->xpath('/domain:name')->attributes()->avail;
echo $data->xpath('/epp:response/epp:resData/domain:chkData/domain:cd/domain:name')->attributes()->avail;
我也尝试了上面没有epp命名空间但结果相同的情况。我知道如何从单个命名空间获取值,而不是从嵌套命名空间获取值。
另一个编辑:
我还在苦苦挣扎。我真的无法获取xpath来查找xml文档中的关联命名空间元素。以下代码是我正在尝试的。
我试图在$ sxe-&gt; xpath(&#39; // d:name&#39;)上做一个vardump但是得到一个空数组,表示没有值?
请有人可以帮助兄弟:)
$sxe = simplexml_load_string($result, "SimpleXMLElement", 0, "epp", true);
$code = $sxe->response->result->attributes()->code;
if ($code == 1000) {
$sxe->registerXPathNamespace('d','ietf:params:xml:ns:domain-1.0');
echo $sxe->xpath('//d:name')->attributes()->avail;
}
exit;
另一个编辑
在另一个答案后,我改变了我的simplexml_load_string()函数声明,并试图声明2个xpath命名空间(感觉就像我到目前为止最接近的那样) - 我能够在epp命名空间中获取值,但仍然没有运气域命名空间。
$sxe = simplexml_load_string($result,NULL,NULL,'urn:ietf:params:xml:ns:epp-1.0');
$sxe->registerXPathNamespace('epp', 'ietf:params:xml:ns:epp-1.0');
$sxe->registerXPathNamespace('domain', 'ietf:params:xml:ns:domain-1.0');
$code = $sxe->xpath('//epp:result')[0]->attributes()->code;
if ($code == 1000) {
print_r($sxe->xpath('domain:name'));
print_r($sxe->xpath('//domain:name'));
}
exit;