Какие библиотеки будут анализировать DTD с использованием PHP - PullRequest
3 голосов
/ 27 мая 2010

Мне нужно проанализировать DTD с помощью PHP, и я надеюсь, что есть простая библиотека, чтобы помочь. У каждого DTD есть множество <!ENTITY... и <!-- Comment... элементов, с которыми мне нужно действовать.

Обратите внимание, что мне не нужно проверять что-либо по этим DTD, просто анализировать их как сами файлы данных.

Несколько вариантов, на которые я смотрел:

SD Джеймса Кларка , который является последним средством, но я бы хотел избежать сложности создания / установки / настройки кода, внешнего по отношению к PHP. Я не уверен, что это даже возможно в моей ситуации.

У PEAR есть XML_DTD_Parser , который требует установки / настройки PEAR и ряда модулей pear, которые я также не уверен, что возможен, и скорее избегать Кто-нибудь использовал это с успехом? РЕДАКТИРОВАТЬ: С тех пор я узнал, что XML_DTD_Parser отбрасывает комментарии, поэтому не подходит для моих нужд.

PHP XML Classes имеет class_path_parser, который предложил другой сайт, но не может прочитать элементы ENTITY. Похоже, он использует встроенные в PHP возможности синтаксического анализа XML, которые используют EXPAT.

PHP DOMDocument будет проверять соответствие DTD , поэтому должен уметь их читать, хотя я не вижу, как с первого взгляда получить доступ к анализатору DTD.

Ответы [ 2 ]

2 голосов
/ 08 июня 2010

Ни один из стандартных синтаксических анализаторов XML для PHP не дает доступа к общим сущностям *, и немногие дают доступ к комментариям. Встроенный в PHP XML Parser использует Expat , но не предоставляет полный API экспата; в частности, обработчик для сущностей не может быть установлен. Существует ошибка PHP , поданная для добавления этого.

AFAICT, единственный способ обрабатывать комментарии и общие сущности в парсере DTD - это написать собственный парсер; либо вручную, либо с помощью одного из лексеров и генераторов синтаксического анализатора, доступных для php (например, PHP_LexerGenerator и PHP_ParserGenerator ).

* Оболочка экспата PHP (XML Parser) действительно дает доступ к объявлениям нотации, которые похожи, но не совпадают с общими сущностями.

1 голос
/ 27 мая 2010

Не знаю, полезно ли это будет ...

Если я понимаю, что вы ищете, вы ищете способ извлечь и "узлы" из DTD для того, чтобыдействовать на них.Очень интересно.Вот куда ушел мой мозг:

  • Используйте класс DOMDocument напрямую.Похоже, что нет никакого четкого способа получить данные DTD, если вы рассматриваете DTD как источник.
  • Используйте SimpleXML таким же образом.То же самое.
  • Используйте синтаксический анализатор XML , опять же, тем же способом, но используйте некоторые из функций обработчика объявления сущности, чтобы получить информацию.Я думаю, что это доказывает больше предвидения и, вероятно, не то, что вам нужно.(Хотя я могу ошибаться.)
  • Используйте preg_match_all или тому подобное, чтобы получить ваши значения на основе шаблонов.Не отличается от других мыслей в мире .
  • Используйте XSLT, чтобы убрать все, кроме того, что вам нужно..Xsl, чтобы удалить все не-комментарии, было бы довольно легко управлять.Вполне возможно, что вы могли бы просто вывести их в формате, который легче анализировать (скажем, в лучшей структуре XML).Для объектов может потребоваться обработка через PHP XSL-процессор .Я немного заржавел от сущностей.

В любом случае, я надеюсь, что это поможет.

...