2015-11-24 3 views
1

Я пытаюсь преобразовать некоторые данные XML в JSON с кодом, как это:SimpleXmlElement потери атрибутов на PHP

$xml = file_get_contents($query); 
$GSP = new SimpleXMLElement($xml); 
echo json_encode($GSP); 

Проблема, во время SimpleXMLElement, я потерял атрибуты в XML-файлах.

Вот пример из XML;

<ENTOBRESULTS> 
<OBRES module_name="ModName"> 
    <provider>ModName</provider> 
    <title>...</title> 
    <MODULE_RESULT> 
    <U> http://someURL.aspx </U> 
    <Title> AnotherTitle </Title> 
    <Field name="Main">ASD</Field> 
    <Field name="ProductType">type</Field> 
    <Field name="buttonText">Press it</Field> 
    <Field name="buttonUrl">https://anotherURL.aspx</Field> 
    </MODULE_RESULT> 
</OBRES> 
</ENTOBRESULTS> 

Но когда я вхожу в $ GSP хрому консоль это показывает, что-то вроде этого:

ENTOBRESULTS: Object 
OBRES: Array[3] 
    0: Object 
    @attributes: Object 
    MODULE_RESULT: Array[3] 
     0: Object 
     Field: Array[22] 
      0: "ASD" 
      1: "type" 
      2: "Press it" 
      3: "https://anotherURL.aspx" 

Как вы можете видеть, я теряю «имя» атрибуты при $ GSP = новый SimpleXMLElement ($ xml) действий. Есть ли способ предотвратить это? ИЛИ как я могу обойти эту проблему?

+0

'{ "OBRES": { "@ атрибуты": { "MODULE_NAME": "MODNAME"}, "поставщик": "MODNAME", "название": "..." , «MODULE_RESULT»: {«U»: «http: \/\/someURL.aspx», «Title»: «AnotherTitle», «Field»: [«ASD», «type», «Press it», «https : \/\/anotherURL.aspx "]}}}' это то, что выводит веб-браузер !!!! –

+0

Тогда как вы хотите выход ??? –

ответ

0

Вам нужно будет перебирать каждый узел XML, получать доступ к атрибутам и создавать конечный объект, который вы в конечном итоге кодируете как json.

пример

$xml = file_get_contents('xml.xml'); 
$GSP = new SimpleXMLElement($xml); 


foreach ($GSP->OBRES->MODULE_RESULT->Field as $f){ 

    //var_dump($f); 

    print $f->attributes() . ":" . $f . PHP_EOL; 

} 

Main:ASD 
ProductType:type 
buttonText:Press it 
buttonUrl:https://anotherURL.aspx 
+0

Привет Алекс, спасибо за ответ Я получаю такое же значение для $ f-> атрибуты() и $ е Main: Главный ProductType: ProductType Как я могу получить значение $ ф? –

+0

вы не должны получать одинаковое значение, '$ f' - это узел, при обращении к которому он дает значение. обновите вопрос с помощью цикла 'foreach', чтобы мы могли посмотреть. –

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