我遇到了一个奇怪但显然有效的XML字符串,我正在通过API返回。我一直在使用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库?
答案 0 :(得分: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..."
}
答案 1 :(得分:0)
您已使用SimpleXML解析XML。我想你想把它解析成一个你没有进一步定义的方便的数组。
您遇到的XML问题在于它的结构不是很明显。如果它没有太大变化,您可以使用SimpleXMLIterator
而不是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...
)
另请参阅online demo和How to parse and process HTML/XML with PHP?。