[英]Converting XML into PHP array with JSON is deleting attributes on some elements
我正在處理一個廣泛的XML文件,使一些處理更容易我已經使用了下面的方法,如堆棧溢出中廣泛提到的
$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
這已經很棒但是我的代碼已經注意到了一些實例,其中某些元素的屬性沒有正確轉換,在這一步$json = json_encode($xml);
這是一個精簡的XML示例。
<?xml version="1.0"?>
<property>
<landDetails>
<area unit="squareMeter"/>
</landDetails>
<buildingDetails>
<area unit="squareMeter">100</area>
</buildingDetails>
</property>
這是輸出。
Array (
[landDetails] => Array (
[area] => Array (
[@attributes] => Array (
[unit] => squareMeter
)
)
)
[buildingDetails] => Array (
[area] => 100
)
)
如上所示,如果元素包含該精確節點上的任何信息,則不處理與該元素相關聯的屬性。 這導致轉換之間的重大數據丟失。
有誰知道如何解決這個問題?
提前致謝!
處理元素,在節點具有屬性AND值的情況下,它們不會顯示。 在這種情況下,僅顯示值。
您執行的json / array轉換不考慮這一點,只保留要顯示的值。 我擔心沒有訣竅可以做到這一點,但這是我在不知道如何巧妙地轉換SimpleXML元素時使用的函數(並且它分別處理屬性和值)
function simplexml_to_array ($xml, &$array) {
// Empty node : <node></node>
$array[$xml->getName()] = '';
// Nodes with children
foreach ($xml->children() as $child) {
simplexml_to_array($child, $array[$xml->getName()]);
}
// Node attributes
foreach ($xml->attributes() as $key => $att) {
$array[$xml->getName()]['@attributes'][$key] = (string) $att;
}
// Node with value
if (trim((string) $xml) != '') {
$array[$xml->getName()][] = (string) $xml;
}
}
$xml = simplexml_load_string($xml);
simplexml_to_array($xml, $arr);
var_dump($arr);
輸出:
array(1) {
["property"]=>
array(2) {
["landDetails"]=>
array(1) {
["area"]=>
array(1) {
["@attributes"]=>
array(1) {
["unit"]=>
string(11) "squareMeter"
}
}
}
["buildingDetails"]=>
array(1) {
["area"]=>
array(2) {
["@attributes"]=>
array(1) {
["unit"]=>
string(11) "squareMeter"
}
[0]=>
string(3) "100"
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.