2010-01-21 5 views
0

J'essaye d'analyser un fichier XML. Je suis capable d'analyser le nœud de texte normal mais comment analyser une liste de textes? Je reçois le premier enfant de la liste de textes c'est tristement tout. Si je tente de faireAnalyse de la liste de textes XML

elem.nextSibling(); 

il est toujours nul qui ne peut être, je sais qu'il ya deux autres valeurs de gauche.

Quelqu'un peut-il me donner un exemple peut-être?

Merci!

exemple XML

<viewentry position="1" unid="7125D090682C3C3EC1257671002F66F4" noteid="962" siblings="65"> 
    <entrydata columnnumber="0" name="Categories"> 
     <textlist> 
      <text>Lore1</text> 
      <text>Lore2</text> 
     </textlist> 
    </entrydata> 
    <entrydata columnnumber="1" name="CuttedSubjects"> 
     <text> 
      LoreImpsum.... 
     </text> 
    </entrydata> 
    <entrydata columnnumber="2" name="$35"> 
     <datetime>20091117T094224,57+01</datetime> 
    </entrydata> 
</viewentry> 
+1

Pouvez-vous publier le code XML que vous essayez d'analyser? (ou une section) –

+0

Sure chose! vérifier ma mise à jour pls – onigunn

+0

Quel analyseur utilisez-vous? BTW: Vous pouvez avoir beaucoup plus de facilité à utiliser Apache Digester que d'essayer d'analyser manuellement XML comme ça. – Uri

Répondre

2

Je suppose que vous utilisez un analyseur DOM.

Le premier enfant du nœud <textlist> n'est pas le premier noeud <text> mais le texte brut qui contient le retour des espaces et le transport entre la fin de <textlist> et le début de <text>. La sortie de l'extrait suivant (en utilisant org.w3c.dom * et javax.xml.parsers *..)

Node grandpa = document.getElementsByTagName("textlist").item(0); 
Node daddy = grandpa.getFirstChild(); 
while (daddy != null) { 
    System.out.println(">>> " + daddy.getNodeName()); 
    Node child = daddy.getFirstChild(); 
    if (child != null) 
     System.out.println(">>>>>>>> " + child.getTextContent()); 
    daddy = daddy.getNextSibling(); 
} 

montre que <textlist> a cinq enfants: les deux <text> éléments et les trois morceaux de texte brut avant, entre et après eux. Lors de l'analyse de XML de cette façon, il est facile d'oublier que la structure de l'arborescence DOM peut être compliquée. Vous pouvez rapidement terminer l'itération sur une liste de nœuds dans la mauvaise génération, puis vous obtenez des valeurs nulles où vous attendez des frères et sœurs. C'est l'une des raisons pour lesquelles les gens ont inventé toutes sortes de choses xml-to-java, des classes XMLHelper développées à la maison aux expressions XPath en passant par Digester et JAXB, donc vous n'avez besoin de descendre au niveau DOM que quand vous le devez.

+0

merci pour cette réponse détaillée. Oui, en ce moment j'utilise l'analyseur DOM, il était plus facile de régler avec lui. Mais je suis d'accord - je vais regarder dans le digesteur. – onigunn