2015-06-26 3 views
1

Я получил XML товар с помощью мыльных апи какИзменить ответ XML в массив или объект

$data = <users><user id="1028240" enabled="True" mustChangePassword="False"> 
<username><![CDATA[Priye1]]></username> 
<firstName><![CDATA[Priye]]></firstName> 
<middleName></middleName> 
<lastName><![CDATA[Priye]]></lastName> 
<email></email> 
<company></company> 
</users> 

Когда я преобразовать данные в простой объект XML $ от

$array = simplexml_load_string($data); 

я получил объект, но объект не содержит любое значение.

После преобразования объекта как следовать

[пользователи] => Array, ( [пользователя] => Array, ( [0] => Массив ( [@attributes] => Массив ( [ID] => 1028240 [Enabled] => True [mustChangePassword] => False )

      [username] => Array 
           (
           ) 

          [firstName] => Array 
           (
           ) 

          [middleName] => Array 
           (
           ) 

          [lastName] => Array 
           (
           ) 

          [email] => Array 
           (
           ) 

          [company] => Array 
           (
           ) 

          [address] => Array 
           (
           ) 

          [city] => Array 
           (
           ) 

          [province] => Array 
           (
           ) 
} 

}

+0

Не могли бы вы сбросить объект и добавить, что на этот вопрос? – arkascha

+0

Спасибо, но я смущен: 1. первая и вторая версия ответа xml, которую вы опубликовали, различаются. 2. Выведенный вами вывод _not_ empty. Так в чем же вопрос? – arkascha

+0

Форматирование этого вопроса может быть улучшено. – Daniel

ответ

2

Похоже, что ваш вход xml недействителен. В таком случае, если вы не какой-либо проверки ошибок и не смотрите на файлы журналов, где показаны ошибки, то могут возникнуть трудности, чтобы видеть, что ...

Вот пример с фиксированной содержание:

<?php 

$data = <<<EOT 
<users> 
    <user id="1028240" enabled="True" mustChangePassword="False"> 
    <username><![CDATA[Priye1]]></username> 
    <firstName><![CDATA[Priye]]></firstName> 
    <middleName></middleName> 
    <lastName><![CDATA[Priye]]></lastName> 
    <email></email> 
    <company></company> 
    </user> 
</users> 
EOT; 

print_r(simplexml_load_string($data, null, LIBXML_NOCDATA)); 

Примечание добавленного </user> к концу, который закрывает user тега открыт во второй строке. Без этого исправления вы получите это предупреждение в CLI или внутри файла журнала ошибок журнала: PHP Warning: simplexml_load_string(): Entity: line 9: parser error : expected '>'.

Также вы должны сообщить анализатору xml, который должен получить доступ и интерпретировать содержимое CDATA, если хотите. Это связано с тем, что такие данные на самом деле не считаются частью самого документа xml. Вы можете сделать это, используя флаг LIBXML_NOCDATA, как показано в окончательном вызове print_r().

Вывод этого сценария:

SimpleXMLElement Object 
(
    [user] => SimpleXMLElement Object 
    (
     [@attributes] => Array 
      (
       [id] => 1028240 
       [enabled] => True 
       [mustChangePassword] => False 
      ) 

     [username] => Priye1 
     [firstName] => Priye 
     [middleName] => SimpleXMLElement Object 
      (
      ) 

     [lastName] => Priye 
     [email] => SimpleXMLElement Object 
      (
      ) 

     [company] => SimpleXMLElement Object 
      (
      ) 

    ) 

) 
+0

@ arkascha Спасибо за помощь :) –

+0

Рад, что я мог бы помочь :-) Может быть, вы хотите поддержать или принять мой ответ :-) – arkascha

+0

@ arkascha Спасибо, это отлично работает. –

Смежные вопросы