2009-06-19 4 views
2

Je crée un formulaire Web dans lequel les administrateurs de mon site peuvent ajouter du XML à une zone de texte et le soumettre pour être stocké dans une table de base de données, mais je suis un peu confus quant à la meilleure méthode d'analyse XML. Le script PHP doit analyser le code XML et s'il y a des erreurs d'analyse, il doit retourner le message d'erreur et la ligne/colonne où l'analyseur a arrêté à l'administrateur qui a envoyé le formulaire. Après l'avoir analysé, il doit accéder au DOM pour exécuter plusieurs vérifications de l'existence de nœuds et d'attributs en utilisant XPath. Si j'utilise xml_create_parser() et xml_parse(), je peux obtenir l'information d'erreur détaillée que je suis après si faux est retourné. Cependant, je ne peux pas accéder au DOM du XML après l'avoir analysé. Si j'utilise DOMDocument::loadXML(), d'après ce que j'ai lu, il ne lance pas d'exceptions pour les erreurs d'analyse, il les affiche simplement dans le journal PHP.Comment puis-je obtenir des informations d'erreur détaillées lors de l'analyse XML tout en conservant le DOM?

Serait-ce un grand succès de performance si j'ai d'abord essayé xml_parse() et puis si cela fonctionne, exécutez DOMDocument::loadXML(), compte tenu des fichiers sont généralement plus petits que 10KB avec quelques-uns étant 10-20KB? Est-ce que quelqu'un sait un meilleur moyen?

Répondre

6

Vous pouvez activer libxml_use_internal_errors puis -si DOMDocument :: load() failed- interroger les messages d'erreur détaillés avec libxml_get_errors()

<?php 
$xml = '<a> 
    <b>xyz</b> 
    <c> 
</a>'; 

libxml_use_internal_errors(true); 
$doc = new DOMDocument; 
if (!$doc->loadxml($xml)) { 
    $errors = libxml_get_errors(); 
    var_dump($errors); 
}
+0

Merci. Chaque fois que je cherchais, je trouvais des gens qui définissaient leurs propres gestionnaires d'erreurs et je ne voyais pas comment obtenir les numéros de ligne/colonne de l'erreur de cette façon. –

Questions connexes