-1

この XML を curl リクエストから受け取りました。

<?xml version="1.0" encoding="utf-8"?>
<transaction>
    <result>PENDING</result>
    <merchanttransid>343434343</merchanttransid>
    <transref>23232323</transref>
    <errorcode>000</errorcode>
    <errormessage/>
    <description/>
</transaction>
SMTP Error: Could not connect to SMTP host.

ただし、サーバーは、SMTP エラーの追加のエラー応答で応答しています: SMTP ホストに接続できませんでした。ここで、simplexml_load_string() を介して解析する場合。

エラーがスローされます:

エンティティ: 10 行目: パーサー エラー: ドキュメントの末尾に余分なコンテンツがあります (エラー番号: 2)

XML は正しく、応答に問題があるだけなので、その余分な行を削除する方法はありますか?

4

2 に答える 2

0

パラメータを渡して関数を呼び出して、XML 読み取りのエラー メッセージを無視することができます。

$xml = simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOERROR |  LIBXML_ERR_NONE);

この関数に渡すことができるオプションの完全なリストを見ることができます: http://www.php.net/manual/en/libxml.constants.php

もう 1 つの解決策 (大きなファイルを解析する場合は適切ではありません) は、文字を 1 行ずつ読み取ってから最後の行を削除することです。

$xml = '<?xml...?>';
$lines = explode("\n", $xml);
unset( $lines[count($lines)-1] ); // remove last line
$output = implode($lines); // output now contains xml without the last line

それが役立つことを願っています。

于 2013-02-25T08:10:57.377 に答える
0

構造が常にこのようになることがわかっている場合は、行ごとにループし、左から空白を取り除き、最初の文字が「<」と異なる場合は行を削除します。最後に、SimpleXML に結果を渡します。

于 2013-02-25T08:11:55.390 に答える