2010-12-28 3 views
2

J'ai une question à propos de l'analyse XML. J'expérimentais avec un exemple de programme et je l'ai modifié un peu pour essayer de comprendre comment l'analyse fonctionne. Cependant, j'ai rencontré une sortie que je ne comprends pas et j'espère que certains d'entre vous pourront éclairer ce qui se passe.xerces-c: DOM xml analyse

Ceci est mon fichier xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<root xmlns="http://www.test.com"> 
    <ApplicationSettings> 
      <option_a>"10"</option_a> 
      <option_b>"24"</option_b> 
    </ApplicationSettings> 
</root> 

I inséré des instructions de débogage tout au long de mon programme pour essayer de comprendre ce qui se passe lorsque la fonction appelle, comme GetChildNodes() traite comme on l'appelle. Ceci est la sortie que j'ai reçu:

Parsing xml file... 
Processing Root... 
Processing children with getChildNodes()... 
>>>>>>>>>>> Loop child 0: Node name is: #text 
>>>>>>>>>>> Loop child 1: Node name is: ApplicationSettings 
= ApplicationSettings processing children with getChildNodes()... 
***** iter 0 child name is #text 
***** iter 1 child name is option_a 
***** iter 2 child name is #text 
***** iter 3 child name is option_b 
***** iter 4 child name is #text 
>>>>>>>>>>> Loop: 2 Node name is: #text 

De la sortie, je peux facilement le déduire correctement mon fichier analysé xml. Cependant, j'ai remarqué que le programme a également détecté des nœuds supplémentaires avec le nom #text (imprimé à l'aide de la fonction getNodeName()). Ma question est, qu'est-ce que ces #text se réfèrent et pourquoi apparaissent-ils périodiquement tout au long des boucles?

Merci!

Répondre

3

Dans votre exemple, les nœuds #text font référence aux espaces entre les balises. Par exemple ici

<root xmlns="http://www.test.com"> 
    <ApplicationSettings> 

il y a un saut de ligne et quatre espaces entre ...com"> et <App....

Vous pouvez essayer d'analyser ce qui suit pour voir ce qui se passe:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<root xmlns="http://www.test.com"><ApplicationSettings><option_a>"10"</option_a><option_b>"24"</option_b></ApplicationSettings></root> 
+0

Intéressant. J'avais le sentiment que cela concernait les espaces blancs d'une manière ou d'une autre. Savez-vous s'il existe un moyen d'éviter d'ajouter ces espaces blancs en tant que nœuds enfants afin d'éviter des frais supplémentaires en boucle? Est-ce que l'analyse est la seule solution? – user459811

+0

@ user459811 Je ne suis pas familier avec xerces, désolé. Vous devriez vous référer à la documentation pour trouver quelque chose comme "ignorer les espaces". – khachik

+0

Merci Khachik. J'ai eu recours à un if-conditionnel pour ignorer les espaces si quelqu'un est intéressé: if ((currentNode-> getNodeType() == DOMNode :: TEXT_NODE) ​​|| (currentNode-> getNodeType() == DOMNode :: COMMENT_NODE)) { continuer; } – user459811