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()or->attributes()方法。

所以你可以说$objects->children('epp', true)->response->result->resData->children('contact', true)->infData->id

codein 属性在技术上<epp:result code="1000">根本不在任何命名空间中,因此您必须选择 NULL 命名空间才能访问它$objects->children('epp', true)->response->result->attributes(NULL)->code

也不要忘记,通过使用别名('epp'、'contact'),您依赖于不更改这些数据的数据源,从技术上讲,它们可以在不更改文件“含义”的情况下进行更改。为了防止这种情况,您必须对 URI (urn:ietf:params:xml:ns:epp-1.0urn: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 回答