Php 如何使用DOMDocument解析xml名称空间并确保获取对象
我正在尝试解析来自其他服务器的xml响应 我可以从xml中获取所需的对象。但是有时候,我怎么也弄不到一些东西。出现了这个错误 致命错误:对第91行中的非对象调用成员函数getElementsByTagName() 我检查了所有的东西,我认为没有什么问题 下面是一个示例xml响应:Php 如何使用DOMDocument解析xml名称空间并确保获取对象,php,xml,xml-parsing,domdocument,php-5.3,Php,Xml,Xml Parsing,Domdocument,Php 5.3,我正在尝试解析来自其他服务器的xml响应 我可以从xml中获取所需的对象。但是有时候,我怎么也弄不到一些东西。出现了这个错误 致命错误:对第91行中的非对象调用成员函数getElementsByTagName() 我检查了所有的东西,我认为没有什么问题 下面是一个示例xml响应: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="http://epp.nic.ir/ns/domain-1.0"> <respon
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
<response xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
<domain:infData xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
<domain:name>pooyaos.ir</domain:name>
<domain:roid>305567</domain:roid>
<domain:status s="serverHold"/>
<domain:status s="irnicReserved"/>
<domain:status s="serverRenewProhibited"/>
<domain:status s="serverDeleteProhibited"/>
<domain:status s="irnicRegistrationDocRequired"/>
<domain:contact type="holder">pe59-irnic</domain:contact>
<domain:contact type="admin">pe59-irnic</domain:contact>
.
.
and more...
我把第91行标错了
谢谢
编辑
$this->dom
是我的DOMDocument对象,没有错误
如果没有问题,有没有更好的方法获取元素?只需将url放入简单的加载文件()
这是一种最简单的方法,但infData不是您的标记名。此XML使用名称空间(域是您的名称空间)。我没有这方面的经验,所以我真的可以进一步帮助你,然后告诉你去哪里找。getElementsByTagName不起作用,您需要类似于DOMXPath的东西,我认为这就是可以使用名称空间的地方 很抱歉,我不能提供进一步的帮助,但由于没有人提到名称空间,我想我还是会添加答案。也许它能帮你在谷歌上找到答案。你需要使用它,它是用于名称空间元素的。找到
domain
指向的命名空间,并将其与目标标记名一起传递给方法,例如roid
或name
输出
305567
pooyaos.ir
在$data=$this->dom->getElementsByTagName(“infData”)->项(0)中显示结果;你的订阅源url是什么。给我,我来指引you@NathanSrivi它是空对象…您不能使用url。您的服务器ip必须在站点中注册。好的,只需使用simplexml\u load\u file()函数并给出结果。我会指引you@Pooya这是一个使用GetElementsByTagname()的简单方法,对我来说非常有用,但我很少(仅在本例中)收到意外错误。
<?php
$xml = simplexml_load_file($xmlfile);
print $xml->infData; // Sample content
?>
$dom = new DOMDocument();
$dom->loadXML($xml);
$ns = 'http://epp.nic.ir/ns/domain-1.0';
$data = $dom->getElementsByTagNameNS($ns, 'infData')->item(0);
$roid = $data->getElementsByTagNameNS($ns, 'roid')->item(0)->nodeValue;
$name = $data->getElementsByTagNameNS($ns, 'name')->item(0)->nodeValue;
// repeat the same for others
echo $roid . "\n";
echo $name;
305567
pooyaos.ir