2010-05-27 2 views
3

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

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

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

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

PEAR имеет XML_DTD_Parser, для чего требуется установка/настройка PEAR и ряда грушевых модулей, что также я не уверен в этом, и избегаю этого. Кто-нибудь использовал его с успехом? EDIT: С тех пор я узнал, что XML_DTD_Parser отбрасывает комментарии, поэтому не подходит для моих нужд.

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

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

ответ

2

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

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

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

1

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

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

  • Используйте DOMDocument class напрямую. Похоже, что нет четкого способа получить данные DTD, если вы рассматриваете DTD как источник. Таким образом, используйте SimpleXML. То же самое.
  • Используйте также XML parser, так же, как и некоторые из функций обработчика декларации сущности для получения информации. Я думаю, что это доказывает более предвидение и, вероятно, не то, что вам нужно. (Хотя я мог ошибаться.)
  • Используйте preg_match_all или т. П., Чтобы захватить ваши значения на основе шаблонов. Не отличается от other thoughts in the world.
  • Используйте XSLT для создания всего, что вам нужно. .Xsl для удаления всех не-комментариев будет довольно легко управлять. Вполне возможно, вы могли бы просто output them in a format that's easier to parse (скажем, в лучшей структуре XML). Сущности могут потребовать обработки через PHP XSL processor. Я немного ржавый на сущности.

Несмотря на это, я надеюсь, что это поможет.