0

他のサーバーからの 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...

そして、私はこのオブジェクトを取得しようとしていますdomain:infData

エラーはこの部分からだと思います。

このオブジェクトを取得しようとすると、domdocument は null を返します。

phpコード:

function DinfData()
    {
        $data = $this->dom->getElementsByTagName("infData")->item(0);

91:     $name = $data->getElementsByTagName("name")->item(0)->nodeValue;
        $roid = $data->getElementsByTagName("roid")->item(0)->nodeValue;
        $update = $data->getElementsByTagName("upDate")->item(0)->nodeValue;
        $crdate = $data->getElementsByTagName("crDate")->item(0)->nodeValue;
        $exdate = $data->getElementsByTagName("exDate")->item(0)->nodeValue;

and more...

91行目を誤ってマークしました。

ありがとう ....

編集

$this->dom私のDOMDocumentオブジェクトであり、エラーはありません。

何も問題がなければ、要素を取得するより良い方法はありますか?

4

3 に答える 3

-1

しかし、infData は tagName ではありません。この XML は名前空間を使用します (ドメインは名前空間です)。それについての経験がないので、どこを見るべきかのヒントからさらにあなたを助けることができます. getElementsByTagName は機能しません。DOMXPath のようなものが必要です。名前空間で何かを行うことができる場所だと思います。

申し訳ありませんが、これ以上お役に立てませんが、誰も名前空間について言及していないので、とにかく答えを追加するだけだと思いました。おそらく、Google で回答を得るのに役立つでしょう。

于 2013-08-08T07:25:13.187 に答える
-1

URL を simple_load_file() に入れるだけです。

<?php
$xml = simplexml_load_file($xmlfile);
print $xml->infData;   // Sample content
?> 

これは最も簡単な方法です

于 2013-08-07T10:24:28.703 に答える