2013-02-17 1 views
1

J'ai un fichier kml (essentiellement xml) qui contient un ensemble de nœuds; le nom, la description, les coordonnées, etc. Jusqu'à présent, je n'avais que deux valeurs; nom et coordonnées. Maintenant, je veux aussi obtenir les données de description, le seul problème est que c'est CData et quand il est analysé, il est ignoré. J'ai utilisé XQuery pour obtenir les données jusqu'à présent;Utilisation de XQuery en Java pour extraire des CData à partir d'un fichier xml

XPathExpression expr = xpath.compile("//name/text()"); 
Object result = expr.evaluate(doc, XPathConstants.NODESET); 
NodeList nodes = (NodeList) result; 
for... 

Dans le fichier kml sa juste <! [CDATA [.....]> par opposition à "101" (une chaîne réelle) En utilisant la même requête ne renvoie rien.

Le fichier kml a la structure:

<Document> 
    <Placemark> 
    <name>101</name> 
    <description><![CDATA[.....]]></description> 
    <polygon> 
     <coordinates>......</coordinates> 
    </polygon> 
    </Placemark> 

    <Placemark> 
    .... 
    </Placemark> 

</Document>  

Est-il possible de le faire par XQuery?

+0

Poster exemple de votre KML – iTech

+0

la structure kml est maintenant inclus aussi bien –

+0

Qu'est-ce XPath utilisez-vous pour sélectionner la description? '// description/text()'? Les informations contenues dans le CDATA doivent être renvoyées en tant que contenu 'text()'. –

Répondre

0

Utilisez l'expression XPath suivante à savoir sans spécifier text():

XPathExpression expr = xpath.compile("//description"); 

et lire le contenu CDATA avec node.getTextContent()

+0

fonctionne parfaitement. Merci beaucoup! –

+2

L'utilisation de text() n'est pas recommandée, mais devrait fonctionner dans cette situation. Si ce n'est pas le cas, votre processeur XQuery a un bug - il distingue les nœuds CDATA des nœuds de texte, ce qui est correct dans DOM, mais pas dans XQuery. –

Questions connexes