0

データベースから XML ファイルを作成中です。その後、その XML ファイルを外部の Web サイトに投稿しようとしています。解析エラーに関連する重大な問題に対処した後、問題が 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 を文字列として POST する必要がある可能性が高いため、DOMDocument を SimpleXML に変換する必要はなく、文字列として出力するだけです。

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

も参照してくださいDOMDocument::saveXML()

に変換しないように注意してください。上記のコードを削除してください。$xmlDocSimpleXMLElement

// 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 に答える