Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用DOMDocument解析xml名称空间并确保获取对象_Php_Xml_Xml Parsing_Domdocument_Php 5.3 - Fatal编程技术网

Php 如何使用DOMDocument解析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

我正在尝试解析来自其他服务器的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">
<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