0

次の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">

ヘルプ/ポインタをいただければ幸いです。

4

2 に答える 2

2

99% 到達しています (何か見落としがない限り)。基本的に、名前空間を「変更」したいときはいつでも、->children()または->attributes()メソッドを使用します。

だからあなたは言うことができます$objects->children('epp', true)->response->result->resData->children('contact', true)->infData->id

code属性<epp:result code="1000">は、技術的にはどのネームスペースにも存在しないため、アクセスするには 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) をハードコーディングする必要があります。

于 2013-03-16T21:51:38.810 に答える
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;
于 2013-03-16T21:51:19.670 に答える