0

API によって返された、奇妙ではあるが明らかに有効な XML 文字列に遭遇しました。XML を関数に渡して便利な配列に変換するのは非常に簡単なので、SimpleXML を使用して XML を解析してきました。

以下は、SimpleXML によって正しく解析されません。

<?xml version="1.0" standalone="yes"?>
<Response>
    <CustomsID>010912-1
        <IsApproved>NO</IsApproved>
        <ErrorMsg>Electronic refunds...</ErrorMsg>
    </CustomsID>
</Response>

単純な XML の結果は次のとおりです。

SimpleXMLElement Object ( [CustomsID] => 010912-1 )

これを XML で解析する方法はありますか? それとも、XML 構造を反映するオブジェクトを返す別の XML ライブラリですか?

4

2 に答える 2

1

これは、テキストと他のノードの奇妙な反応です。手動で(配列ではなくオブジェクトとして)トラバースすると、中に入ることができるはずです:

<?php
    $xml = '<?xml version="1.0" standalone="yes"?>
    <Response>
        <CustomsID>010912-1
            <IsApproved>NO</IsApproved>
            <ErrorMsg>Electronic refunds...</ErrorMsg>
        </CustomsID>
    </Response>';

    $sObj = new SimpleXMLElement( $xml );

    var_dump( $sObj->CustomsID );

    exit;
?>

2 番目のオブジェクトの結果:

object(SimpleXMLElement)#2 (2) {
  ["IsApproved"]=>
  string(2) "NO"
  ["ErrorMsg"]=>
  string(21) "Electronic refunds..."
}
于 2013-02-16T01:39:13.783 に答える
0

XML はすでに SimpleXML で解析しています。それを、さらに定義しない便利な配列に解析したいと思います。

あなたが持っている XML の問題は、その構造があまりはっきりしていないことです。あまり変わらない場合は、 a のSimpleXMLIterator代わりに aを使用して配列に変換できSimpleXMLElementます。

$it    = new SimpleXMLIterator($xml);
$mode  = RecursiveIteratorIterator::SELF_FIRST;
$rit   = new RecursiveIteratorIterator($it, $mode);
$array = array_map('trim', iterator_to_array($rit));

print_r($array);

問題の XML 文字列については、次のようになります。

Array
(
    [CustomsID] => 010912-1
    [IsApproved] => NO
    [ErrorMsg] => Electronic refunds...
)

オンライン デモHow to parse and process HTML/XML with PHP?も参照してください。.

于 2013-02-16T07:18:09.457 に答える