php xml架构格式

时间:2017-12-08 10:51:04

标签: php xml

我有一个php页面是什么帖子的xml到Heartinternet API并且很长一段时间后我已经让它工作了但是现在我无法找到只从响应的XML中拉出一部分

$some_xml = '<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:package="http://www.heartinternet.co.uk/whapi/package-2.2">
  <command>
    <info>
      <package:info>
        <package:id>171371a16973b1bf</package:id>
      </package:info>
    </info>
    <extension>
      <ext-package:preAuthenticate xmlns:ext-package="http://www.heartinternet.co.uk/whapi/ext-package-2.2"/>
    </extension>
    <clTRID>fac89208bea460fa3fef11b22a519cce</clTRID>
  </command>
</epp>';

这是发布到API的代码。可以看到完整代码here

这是我回来的,无法弄清楚如何从回复中拉出一行。

<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-package="http://www.heartinternet.co.uk/whapi/ext-package-2.2">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <ext-package:redirectURL>http://bobcp.example.org/sso.cgi?session=LUB9UNbw6jTW</ext-package:redirectURL>
    </resData>
    <trID>
      <clTRID>fac89208bea460fa3fef11b22a519cce</clTRID>
      <svTRID>test-19272326601ef4c3bf6b64730d09c6cf</svTRID>
    </trID>
  </response>
</epp>

我需要展示的一行是ext-package:redirectURL

如果有人可以帮助我或指出我正确的方向找到如何排序,我将不胜感激!

2 个答案:

答案 0 :(得分:0)

您可以通过注册名称空间urn:ietf:params:xml:ns:epp-1.0来获取重定向网址,然后您可以使用xpath表达式。在这种情况下,我选择u作为前缀。

  

/ U:EPP / U:响应/ U:resData / EXT-包:的redirectUrl

SimpleXML与您返回的xml一起使用:

评论中的响应xml略有不同。这是更新的代码:

$returned_xml->registerXPathNamespace('u', 'urn:ietf:params:xml:ns:epp-1.0');
$returned_xml->registerXPathNamespace('ext-package', 'http://www.heartinternet.co.uk/whapi/ext-package-2.2');
$redirectUrl = $returned_xml->xpath('/u:epp/u:response/u:resData/ext-package:redirectURL');
echo $redirectUrl[0];

DOMDocument

$doc = new DOMDocument();
$doc->loadXML(file_get_contents("https://custom-hosting.co.uk/source/test.php"));
$xpath = new DOMXpath($doc);
$xpath->registerNamespace('u', 'urn:ietf:params:xml:ns:epp-1.0');
$xpath->registerNamespace('ext-package', 'http://www.heartinternet.co.uk/whapi/ext-package-2.2');
$redirectUrl = $xpath->query('/u:epp/u:response/u:resData/ext-package:redirectURL')->item(0)->nodeValue;

echo $redirectUrl;

那会给你举个例子:

http://bobcp.example.org/sso.cgi?session=LUB9UNbw6jTW

答案 1 :(得分:0)

<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-package="http://www.heartinternet.co.uk/whapi/ext-package-2.2">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <ext-package:redirectURL>http://bobcp.example.org/sso.cgi?session=LUB9UNbw6jTW</ext-package:redirectURL>
    </resData>
    <trID>
      <clTRID>fac89208bea460fa3fef11b22a519cce</clTRID>
      <svTRID>test-19272326601ef4c3bf6b64730d09c6cf</svTRID>
    </trID>
  </response>
</epp>

这是我从API发回的,而不是我的测试页面

Full page source

如果我添加

$xml = simplexml_load_string($returned_xml);
$xml->registerXPathNamespace('u', 'urn:ietf:params:xml:ns:epp-1.0');
$redirectUrl = $xml->xpath('/u:epp/u:response/u:resData/ext-package:redirectURL');
echo $redirectUrl[0];

到我刚刚获得的页面

XML解析错误:找不到元素

地点:https://custom-hosting.co.uk/

第1行,第1列: