Преобразование XML в JSON требует от вас отказаться от какой-либо структуры XML или иметь очень глубоко вложенный набор объектов и массивов JSON. В первом случае вы отбрасываете информацию, которую вы захотите позже; во втором, вы создаете что-то труднее, чем работа с XML, в первую очередь.
В любом случае, после преобразования в JSON вам придется проанализировать этот JSON, чтобы фактически использовать его, так же, как вам нужно будет каждый раз анализировать XML, поэтому нет никакой реальной разницы о котором я могу думать.
Если вы используете PHP, SimpleXML (на мой взгляд) довольно аккуратный инструмент. Важно помнить, что это не просто большой вложенный массив, содержащий XML, а API для доступа к данным. Так, например, вам не нужно беспокоиться о том, будет ли один ребенок <foo>
или несколько, foreach ($node->foo as $foo)
всегда будет работать, а echo $node->foo
всегда будет соответствовать echo $node->foo[0]
.
Или, как упоминалось в комментариях, есть другие XML-интерфейсы, которые могут лучше соответствовать вашим потребностям. Однако с JSON вы почти застряли с json_decode
, а затем занимаетесь массивным массивом данных (после того, как вы его разобрали, это не JSON, а не mor); хотя вы могли бы найти вспомогательные функции для того, чтобы глубже проникать в массивы PHP.
Из моего опыта работы с SimpleXML действительно ужасно. Технически это должно быть быстрее, чтобы проанализировать XML непосредственно, чем преобразовать его в json (потому что вы должны сначала разобрать его сначала, прежде чем преобразовать его в json - в этом случае библиотека сделает это за вас). Недавно для разбора XML и HTML я использовал [symfony/dom-crawler] (https://github.com/symfony/dom-crawler) с помощью [symfony/css-selector] (https://github.com/ symfony/css-selector), и он работает очень хорошо. Код выглядит действительно чистым. – Skysplit
@Skysplit Не могли бы вы рассказать, как ужасно работали с SimpleXML? –
Что я нахожу действительно глупым (просто личное мнение), что вам нужно называть '$ node -> __ toString()' или '(string) $ node', чтобы получить внутренний html заданного узла. Я тоже не большой поклонник XPath. Домашний искатель Symfony дает вам более свободный API (фильтрация с использованием селекторов CSS также очень удобна для меня). – Skysplit