0

我遇到了一个 API 返回的奇怪但显然有效的 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;
?>

结果第二个对象:

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

您已经使用 SimpleXML 解析了 XML。我猜你想把它解析成一个方便的数组,你没有进一步定义。

您拥有的 XML 的问题在于它的结构不是很明显。如果它没有太大变化,您可以使用 aSimpleXMLIterator而不是 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...
)

另请参阅在线演示如何使用 PHP 解析和处理 HTML/XML?.

于 2013-02-16T07:18:09.457 回答