4

以下の XML に DOMDocument::loadXML() を使用すると、エラーが発生します。

Warning: DOMDocument::loadXML() [domdocument.loadxml]: CData section not finished http://www.site.org/displayimage.php?album=se in Entity,
Warning: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag image line 7 in Entity
Warning: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag quizz line 3 in Entity
Warning: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag quizzes line 2 in Entity
Fatal error: Call to a member function getElementsByTagName() on a non-object 

私の CData セクションは閉じられているようですが、それでもこのエラーが発生します。XML は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<quizzes>
<quizz>
<title><![CDATA[Title]]></title>
<descr><![CDATA[Some text here!]]></descr>
<tags><![CDATA[one tag, second tag]]></tags>
<image><![CDATA[http://www.site.org/displayimage.php?album=search&cat=0&pos=1]]></image>
<results>
<result>
<title><![CDATA[Something]]></title>
<descr><![CDATA[Some text here]]></descr>
<image><![CDATA[http://www.site.org/displayimage.php?album=search&cat=0&pos=17]]></image>
<id>1</id>
</result>
</results>
</quizz>
</quizzes>

問題が何であるかを発見するのを手伝ってもらえますか?

4

5 に答える 5

2

cURL を使用する場合の PHP の特定のケースにのみ関連するため、これがトピックから外れている場合は申し訳ありませんが、tomaszs が述べているように、PHP で cURL を介して XML を渡すときにアンパサンドが問題を引き起こす可能性があることも発見しました。アンパサンドが適切にエンコードされた既知の有効な XML 文字列を受信し、cURL を使用して別のアドレスに転送していました。このようなもの...

$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL,            $fullUri);
curl_setopt($curlHandle, CURLOPT_HEADER,         false);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlHandle, CURLOPT_CONNECTTIMEOUT, 4); // seconds
curl_setopt($curlHandle, CURLOPT_POST,           true);
curl_setopt($curlHandle, CURLOPT_POSTFIELDS,     "xmlstr=" . $xmlstr); // Problem

この問題は、XML を CURLOPT_POSTFIELDS に追加する際に上記の最後の行で発生します。最初にエンコードされたアンパサンドは、querstring のようにパラメーターの区切り文字として認識され、"xmlstr" 変数/フィールドは切り捨てられます。

私が使用した解決策は、上記の最後の行を次のように置き換えることでした...

curl_setopt($curlHandle, CURLOPT_POSTFIELDS,     "xmlstr=" . urlencode($xmlstr));

これが誰かに役立つことを願っています。

于 2011-03-16T18:03:00.127 に答える
-2

エラーは表示されません (実際に使用されている XML が提供されているものと異なるか、使用されている xml プロセッサ (ところで、それは何ですか?) にバグがあります)。

CDATA セクションの使用は避けることをお勧めします。次の XML ドキュメントを使用します。これは、提供されているものと同じ (テキストが同等) で、はるかに読みやすいものです。

<quizzes>
   <quizz>
      <title>Title</title>
      <descr>Some text here!</descr>
      <tags>one tag, second tag</tags>
      <image>http://www.site.org/displayimage.php?album=search&amp;cat=0&amp;pos=1</image>
      <results>
         <result>
            <title>Something</title>
            <descr>Some text here</descr>
            <image>http://www.site.org/displayimage.php?album=search&amp;cat=0&amp;pos=17</image>
            <id>1</id>
         </result>
      </results>
   </quizz>
</quizzes>
于 2010-05-09T16:12:39.213 に答える
-2

問題は、PHP で cURL を使用してこの XML を渡すことにあることがわかりました。通常のテキストとして送信しましたが、この XML の & char は次のパラメーターへの区切り記号として解釈されました。したがって、この文字をエスケープすると、適切に機能し始めました。

于 2010-05-24T08:01:44.870 に答える