Ниже приведена функция, которую я использую для преобразования XML в массив
$xml = '<xml><CodeshareInfo OperatingCarrier="EY" OperatingFlightNumber="269">ETIHAD AIRWAYS</CodeshareInfo></xml>';
$obj = simplexml_load_string($xml); // Parse XML
$obj->registerXPathNamespace("soap", "http://www.w3.org/2003/05/soap-envelope");
$array = json_decode(json_encode($obj), true); // Convert to array
когда я пытаюсь с родительским узлом «XML»
<xml><CodeshareInfo OperatingCarrier="EY" OperatingFlightNumber="269">ETIHAD AIRWAYS</CodeshareInfo></xml>
я получаю этот результат
Array
(
[CodeshareInfo] => ETIHAD AIRWAYS
)
но если я попробую без родительского узла «XML»
<CodeshareInfo OperatingCarrier="EY" OperatingFlightNumber="269">ETIHAD AIRWAYS</CodeshareInfo>
я могу получить атрибуты и значение
Array
(
[@attributes] => Array
(
[OperatingCarrier] => EY
[OperatingFlightNumber] => 269
)
[0] => ETIHAD AIRWAYS
)
что я должен изменить в коде, чтобы получить выходные данные с атрибутами и значениями, так как мои данные xml взяты из запроса мыла, и как только я получу, я преобразую в виде массива для доступа к его значению и атрибутам.
Учитывая предоставленный XML, вы можете перебирать его и извлекать атрибуты и значения.
<?php
$xml = '<xml><CodeshareInfo OperatingCarrier="EY" OperatingFlightNumber="269">ETIHAD AIRWAYS</CodeshareInfo></xml>';
$obj = simplexml_load_string($xml); // Parse XML
$obj->registerXPathNamespace("soap", "http://www.w3.org/2003/05/soap-envelope");
foreach($obj as $ob) {
echo $ob['OperatingCarrier'] . "\n";
echo $ob . "\n";
echo $ob['OperatingFlightNumber'] . "\n";
}
Выход:
EY
ETIHAD AIRWAYS
269
Других решений пока нет …