Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What libraries will parse a DTD using PHP

Tags:

php

parsing

dtd

I need to parse DTDs using PHP and am hoping there's a simple library to help out. Each DTD has numerous <!ENTITY... and <!-- Comment... elements, which I need to act upon.

Note that I do not need to validate anything against these DTDs, simply parse them as data files themselves.

A few options I've looked at:

James Clarke's SD, which is an option of last resort, but I'd like to avoid the complexity of building/installing/configuring code external to PHP. I'm not sure it's even possible in my situation.

PEAR has an XML_DTD_Parser, which requires installing/configuring PEAR and a number of pear modules, which I'm also not sure is possible, and would rather avoid. Has anyone used it with success? EDIT: I've since learned that XML_DTD_Parser discards comments, so is not a valid option for my needs.

PHP XML Classes has the class_path_parser, which another site suggested, but it fails to read ENTITY elements. It appears to be using PHP's built in XML parsing capabilities, which use EXPAT.

PHP's DOMDocument will validate against a DTD, so must be able to read them, though I don't see how to get at the DTD parser directly at first glance.

like image 836
Chadwick Avatar asked May 06 '26 22:05

Chadwick


1 Answers

None of the standard XML parsers for PHP give access to general entities*, and few give access to comments. PHP's built in XML Parser uses Expat, but does not expose the full expat API; in particular, a handler for entities cannot be set. There is a PHP bug filed to add this.

AFAICT, the only way to handle comments and general entities in a DTD parser is to write your own parser; either by hand, or using one of the lexers and parser generators available for php (e.g. PHP_LexerGenerator and PHP_ParserGenerator among others).

* PHP's expat wrapper (XML Parser) does give access to notation declarations, which are similar to, but not the same as general entities.

like image 60
Chadwick Avatar answered May 09 '26 11:05

Chadwick



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!