2012-06-30 3 views
0

Я получаю строку JSON в PHP страницу:PHP массив функции XML

$JSON = $_POST['submit']; 

$Array = json_decode($JSON); 

$xml = arrayToXML($Array,"","root"); 

echo $xml; 

где arrayToXML это функция, я сделал для puropose.

Функция работает отлично, но есть несколько проблем, я хотел бы исправить:

1.Duplicate Теги:

Допустим, у нас есть строка JSON, такие как

{element:[{sub1:xxxx,sub2:xxx},{sub1:xxxx,sub2:xxx},{sub1:xxxx,sub2:xxx}]} 

соответствующий XML будет, как

<element> 

    <sub1>xxxx</sub1> 
    <sub2>xxx</sub2> 

</element> 

<element> 

    <sub1>xxxx</sub1> 
    <sub2>xxx</sub2> 

</element> 

<element> 

    <sub1>xxxx</sub1> 
    <sub2>xxx</sub2> 

</element> 

Но рекурсия моей функции дублирует первый тег и последний. Я понимаю, почему это так, но я не могу понять, как это исправить. Поэтому я решил это путем preg_replacing дублирующих тегов. Есть ли лучший способ исправить это? На самом деле я пару дней думал об этом.

2. Отступ:

Я хотел функцию для генерации XML в причудливом читаемом образе человека, поэтому я ставлю новые строки между соседними метками, но как я могу определить правильные вложенные отступы?

Я tryied это:

$xml = preg_replace("/(\t*)(<\/?.+>)(<\/?.+>)/","$2\n$1\t$3",$xml); 

но оказывается compleately wrog. Что было бы правильным?

Большое спасибо.

+2

Включите функцию. –

+1

Вы можете конвертировать json в XML с помощью [PEAR :: XML_Serializer] (http://pear.php.net/package/XML_Serializer). Во-первых, конвертировать json в объект, а затем преобразовать объект в XML – Farahmand

+0

, функция должна быть правильно связана ... – Onheiron

ответ

3

Регулярные выражения плохо подходят для разбора и работы с xml в целом. PHP имеет очень хорошие встроенные парсеры с DOMDocument (обертка для awesome libxml2) и SimpleXML.

+0

SimpleXML определенно подходит, если вы никогда не использовали ни один из них раньше. –

1

ссылаясь на первое сомнение «дублирующий тег», я думаю, что лучшее, что вы можете сделать, это изменить строку JSON на нужную вам структуру, если вам нужно больше одного номера телефона, измените строку JSON на имеют больше, чем элемент номера телефона, возможно, вы можете сделать что-то вроде preg_replace или определить struture массива, чтобы изменить его, но это будет своего рода обходным путем. , но, как правило, я согласен с Explosion Pills, у вас есть инструменты, которые можно использовать для анализа этого массива.