2009-06-15 9 views
1

J'essaie d'extraire la structure d'un document XML en PHP sans étendre les entités à l'intérieur. Je suis conscient que les entités sont généralement étendues avant que la structure soit analysée, et qu'ignorer cela signifie que le XML peut ne pas être bien formé, mais j'analyse des fragments XML qui pourraient ne pas inclure l'en-tête de document XML normal, et Il manquera donc les déclarations d'entité.Analyse de la structure XML sans expansion des entités dans PHP

Idéalement, je voudrais un rappel quand une entité non déclarée est trouvée afin que je puisse la gérer moi-même. XMLReader et xml_parser semblent n'avoir aucun moyen de désactiver les erreurs qu'ils produisent lors de l'analyse. Y a-t-il un moyen facile de le faire, ou devrais-je me rabattre sur mon propre analyseur (ce qui ne serait pas un désastre? J'ai juste besoin d'analyser quelques balises, et ensuite garder tout le texte à l'intérieur)).

Voici un exemple d'une DocBook du premier chapitre du guide DocBook officiel:

<chapter id="ch-gssgml"> 
<?dbhtml filename="ch01.html"?> 
<chapterinfo> 
<pubdate>$Date$</pubdate> 
<releaseinfo>$Revision$</releaseinfo> 
</chapterinfo> 
<title>Getting Started<?lb?>with &SGML;/&XML;</title> 
<para> 
    ... 
</para> 
</chapter> 

Essayer d'analyser ce meurt juste dès qu'il voit l'entité &SGML;.

Répondre

1

Après un peu de navigation à travers XMLReader: Avez-vous essayé ceci:

XMLReader::setParserProperty en combinaison avec XMLReader::SUBST_ENTITIES? N'a rien essayé, semble juste prometteur. Fonctionne comme

XMLReader::setParserProperty ('SUBST_ENTITIES', 0); 

Il semble qu'il n'y ait aucune documentation sur les valeurs acceptées par SUBST_ENTITIES.

Cheers,

+0

J'ai essayé quelque chose de similaire, mais je n'ai pas réussi à changer le comportement. J'ai peut-être utilisé la mauvaise syntaxe, alors je vais essayer votre suggestion - merci pour le conseil! –