簡體   English   中英

使用JSON將XML轉換為PHP數組是刪除某些元素的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM