Какие библиотеки будут анализировать DTD с помощью PHP


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

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

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

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

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

Классы PHP XML имеют class_path_parser, который предложил другой сайт, но он не может прочитать элементы СУЩНОСТИ. Похоже, он использует встроенные в PHP возможности синтаксического анализа XML, которые используют EXPAT.

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

Author: Chadwick, 2010-05-27

2 answers

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

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

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

 2
Author: Chadwick, 2010-06-07 23:03:35

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

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

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

Несмотря на это, я надеюсь, что кое-что из этого поможет.

 1
Author: allnightgrocery, 2010-05-27 02:29:12