Зачем использовать анализатор XML? - PullRequest
2 голосов
/ 30 августа 2010

Я немного опытный PHP-сценарист, однако я просто увлекся парсингом XML и всего такого хорошего.

Я просто не могу понять, почему одинбудет использовать отдельный синтаксический анализатор XML вместо использования функции explode, которая кажется такой же простой.Вот что я делал (предполагая, что по пути xml.php существует допустимый XML-файл):

$contents = file_get_contents("xml.php");
$array1 = explode("<a_tag>", $contents);
$array2 = explode("</a_tag>", $array1[1]);
$data = $array2[0];

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

Заранее спасибо!:)

Ответы [ 5 ]

14 голосов
/ 30 августа 2010

Извините, что не буду вдаваться в подробности, но для начала попробуйте разбор

$contents = '<a xmlns="urn:something"> 
  <a_tag>
    <b>..</b>
    <related>
      <a_tag>...</a_tag>
    </related>
  </a_tag>
  <foo:a_tag xmlns:foo="urn:something">
    <![CDATA[This is another <a_tag> element]]>
  </foo:a_tag>
</a>';

с вашим взрывным подходом. Когда вы закончите, мы можем продолжить некоторые хитрые вещи; -)

10 голосов
/ 30 августа 2010

В двух словах, его последовательность.До широкого использования XML существовало множество недокументированных форматов для хранения информации в файлах.Одним из мотиваторов XML было создание четко определенного стандартного формата документа.С этим четко определенным форматом можно было бы разработать общий набор инструментов синтаксического анализа, которые будут последовательно работать с документами, если документы придерживаются вышеупомянутого четко определенного формата.

В некоторых конкретных случаях ваш пример кода будет работать.Однако, если документ изменится

...
<!-- adding an attribute -->
<a_tag foo="bar">Contents of the Tag</a_tag>
...

...
<!-- adding a comment to the contents -->
<a_tag>Contents <!-- foobar --> of the Tag</a_tag>
...

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

7 голосов
/ 30 августа 2010

XML-анализаторы:

  • Кодировка дескриптора
  • Может иметь поддержку xpath
  • Позволяет легко изменять и сохранять XML;добавлять / удалять дочерние узлы, добавлять / удалять атрибуты и т. д.
  • Не нужно загружать весь файл в память (кроме анализаторов DOM)
  • Знать о пространствах имен
  • ...
6 голосов
/ 30 августа 2010

Как бы вы взорвали тот же файл, если бы a_tag имел атрибут?

explode("<a_tag>" ... будет работать иначе, чем explode("<a_tag attr='value'>" ..., в конце концов.

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

1 голос
/ 30 августа 2010

Использование проверенного метода синтаксического анализа XML сделает код более понятным и легким для чтения. Это также сделает его более легко адаптируемым при изменении схемы, и это может упростить определение условий ошибки. XPath и XSLT существуют по определенной причине, они представляют собой проверенные способы обработки XML-данных разумным и понятным способом. Я бы посоветовал вам использовать то, что применимо в вашей ситуации. Помните, просто потому, что вы думаете, что пишете код только для одной конкретной цели, вы никогда не знаете, во что может превратиться кусок хорошо написанного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...