如何从原始XML CURL响应生成数组?

时间:2013-05-17 09:38:25

标签: xml curl

我已经尝试按照this thread中的建议,但我似乎仍然无法从原始XML CURL响应中获取可用的数组(实际上我只想从输出中获取几位数据)。 ..

这是我的代码:

echo "Curl started...<br />\n\n";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$response=curl_exec ($ch);
curl_close ($ch);

$response_xml = simplexml_load_string($response);
$system_ref = $response_xml->OBJECT->SYSTEMREFERENCE; 

echo "Curl finished...<br />\n\n";

print_r($response_xml);

这是原始响应,它被送入$ response:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE IAD.IF.OBJECTRESPONSE SYSTEM "http://www.someplace.com/dtd/IADIF-objectresponse.dtd">
<IAD.IF.OBJECTRESPONSE>
<HEAD>
  <PARTNER>somepartner</PARTNER>
  <UPLOAD_REFERENCE/>
  <IMPORTTYPE>STORING AD</IMPORTTYPE>
  <PROCESSEDTIME>2013.05.17 11:29:29</PROCESSEDTIME>
  <SOURCE>originalsource_342423424.xml</SOURCE>
</HEAD>
<OBJECT STATUS="ok">
  <ORDERNO/>
  <VERSION></VERSION>
  <USERREFERENCE></USERREFERENCE>
  <SYSTEMREFERENCE>34324242</SYSTEMREFERENCE>
</OBJECT>
</IAD.IF.OBJECTRESPONSE>

所以,如果我回显或print_r $响应,我得到一个原始字符串输出...但是如果我print_r $ response_xml(如上例所示),我似乎什么也得不到。

目前,我的目标是简单地将 SYSTEMREFERENCE 数据转换为变量......

有人可以提供建议吗?

---------

PS。已经潜伏了一段时间,但这似乎是我在Stackoverflow上的第一个问题,所以请放轻松我。希望我做得对。 :)

2 个答案:

答案 0 :(得分:0)

最快的方法是:

preg_match( '/<SYSTEMREFERENCE>(.+?)<\/SYSTEMREFERENCE>/i', $str, $res );
print_r( $res );

另外看看PHP DOM模块,但上面是最快的。

答案 1 :(得分:0)

您自己的代码已经拥有您需要的代码,值在您的$system_ref变量中,只需回显它。我已根据您的代码片段编写此代码段,并输出您之后的结果:

<?php
$response = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE IAD.IF.OBJECTRESPONSE SYSTEM "http://www.someplace.com/dtd/IADIF-objectresponse.dtd">
<IAD.IF.OBJECTRESPONSE>
    <HEAD>
        <PARTNER>somepartner</PARTNER>
        <UPLOAD_REFERENCE />
        <IMPORTTYPE>STORING AD</IMPORTTYPE>
        <PROCESSEDTIME>2013.05.17 11:29:29</PROCESSEDTIME>
        <SOURCE>originalsource_342423424.xml</SOURCE>
    </HEAD>
    <OBJECT STATUS="ok">
        <ORDERNO />
        <VERSION />
        <USERREFERENCE />
        <SYSTEMREFERENCE>34324242</SYSTEMREFERENCE>
    </OBJECT>
</IAD.IF.OBJECTRESPONSE>
XML;

$response_xml = new SimpleXMLElement($response);
$system_ref   = $response_xml->OBJECT->SYSTEMREFERENCE; 

echo $system_ref;

输出:

34324242