2016-08-23 5 views
0

У меня есть XML как строка, и мне нужно разобрать его, а затем сохранить значения в базе данных. У меня есть два пути:Что будет лучшим вариантом: проанализировать XML напрямую или преобразовать XML в JSON, а затем выполнить синтаксический анализ?

  • Разбор XML с помощью simple xml
  • Преобразование XML-строку в формате JSON (я буду использовать IBM, x-xml2jsonphp)

Что будет лучше подход с точки зрения эффективности и ремонтопригодности и почему?

+0

Из моего опыта работы с 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

+0

@Skysplit Не могли бы вы рассказать, как ужасно работали с SimpleXML? –

+0

Что я нахожу действительно глупым (просто личное мнение), что вам нужно называть '$ node -> __ toString()' или '(string) $ node', чтобы получить внутренний html заданного узла. Я тоже не большой поклонник XPath. Домашний искатель Symfony дает вам более свободный API (фильтрация с использованием селекторов CSS также очень удобна для меня). – Skysplit

ответ

2

Преобразование XML в JSON, а затем обработка JSON почти неизбежно будет медленнее, потому что вы анализируете, сериализуете и затем повторно разбираете, что связано с длительностью, чем просто синтаксический анализ.

Независимо от того, проще и удобнее его обслуживать, полностью зависит от XML. Если он использует такие функции, как пространства имен и смешанный контент, то преобразование в JSON будет либо (a) дать вам очень сложный JSON для решения проблемы, либо (b) потерять информацию, которая может понадобиться вашему приложению. (Но я не знаю конкретную библиотеку, которую вы предлагаете использовать). С другой стороны, если это очень простой XML, тогда вам может понадобиться написать меньше кода таким образом, и это приравнивается к лучшей ремонтопригодности.

1

Преобразование 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.