0

我正在从数据库创建 XML 文件。随后,我正在获取该 XML 文件并尝试将其发布到外部网站。在处理与解析错误有关的严重问题后,我意识到问题是使用 DOMDocument 的结果,因此我将其转换为 simpleXML。

我收到的错误是:Obj: SimpleXMLElement Object ([@attributes] => Array ([Reason] => Failed to retrieve query string parameters)) Reference=

//Save XML
$xmlDoc->save("file.xml");

//Convert DOMDocument to SimpleXML
$sxmlDoc = simplexml_load_file("file.xml");
print_r($sxmlDoc);

//Posting Order XML with PHP
$PartnerNumber = '1111'; 
$PartnerReference = $row['id'];
$OrderXml = '<Order Test="true">'.$sxmlDoc.'</Order>';
$urlConn = curl_init ("https://website.com/PostXmlOrder.axd?
   PartnerNumber=".$PartnerNumber."&PartnerReference=".urlencode($PartnerReference));
curl_setopt ($urlConn, CURLOPT_POST, 1);
curl_setopt ($urlConn, CURLOPT_HTTPHEADER, array("Content-type", "text/xml"));
curl_setopt ($urlConn, CURLOPT_POSTFIELDS, $sxmlDoc);
curl_setopt ($urlConn, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($urlConn, CURLOPT_SSL_VERIFYPEER, 0);
$result = curl_exec($urlConn);
if (empty($result)) {
  print "ERROR: " . curl_error($urlConn) . "\n";
  exit;
}
// Parse the response
$xml = simplexml_load_string($result);
echo "Obj:\r\n";
print_r($xml);
echo "Reference=";
echo $xml->attributes()->Reference;

XML 文件以 SimpleXML 格式输出到屏幕。有任何想法吗?

4

1 回答 1

0

你正在做一些额外的循环。

让我们回顾一下:您很可能需要将 XML 发布为字符串,因此您不需要将 DOMDocument 转换为 SimpleXML,只需将其输出为字符串:

curl_setopt ($urlConn, CURLOPT_POSTFIELDS, $xmlDoc->saveXML());

也见DOMDocument::saveXML()

注意不要转换$xmlDoc为 a SimpleXMLElement,因此请从上面删除该代码。

// Create XML String
$xml = $xmlDoc->saveXML();

// Posting Order XML with Curl
$PartnerNumber    = '1111'; 
$PartnerReference = $row['id'];

$url = sprintf(
  "https://example.com/PostXmlOrder.axd?PartnerNumber=%s&PartnerReference=%s", 
   urlencode($PartnerNumber), 
   urlencode($PartnerReference)
);

$urlConn = curl_init($url);
curl_setopt_array(
    $urlConn, 
    array(
        CURLOPT_POST           => 1,
        CURLOPT_HTTPHEADER     => array("Content-type", "text/xml"),
        CURLOPT_POSTFIELDS     => $xml,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => 0,    
   )
);


$result = curl_exec($urlConn);
if (empty($result)) {
  print "ERROR: " . curl_error($urlConn) . "\n";
  exit;
}

// Parse the response
$sxml = simplexml_load_string($result);

echo "Obj:\r\n", print_r($sxml);
echo "Reference=", $sxml->attributes()->Reference;
于 2013-02-06T00:11:52.000 回答