Salve,
sto leggendo un file xml con Xpath e sto riscontrato qualche problema nella lettura dei nodi che non riesco a spiegare. Veniamo a voi
il file esempio che sto leggendo per fare dei test è il seguente
per la lettura dei file xml sto utilizzando questi metodicodice:<series name="futurama"> <season id="1"> <episode>Pilota spaziale 3000</episode> <episode>La serie è atterrata</episode> <episode>Io, coinquilino</episode> <episode>L'amore perduto nello spazio</episode> <episode>Paura del pianeta robot</episode> <episode>Per un pesce di dollari</episode> <episode>I miei tre soli</episode> <episode>Palla di immondizia</episode> <episode>Un viaggio infernale</episode> <episode>Un volo da ricordare</episode> <episode>Università marziana</episode> <episode>Attacco alieno</episode> <episode>Gusto a sorpresa</episode> </season> <season id="2"> <episode>Amazzoni in amore</episode> <episode>Un parassita perduto</episode> <episode>Aiuto, è Natale!</episode> <episode>Il quadrifoglio</episode> <episode>Pingui-bot di Gel-catraz</episode> <episode>Il pizzetto ballerino</episode> <episode>Cervello grosso, scarpa fine</episode> </season> </series>
come si può vedere dalla path mi sto spostando su series e sulla season 1.codice:private Document createXMLDocument(String fileName) throws Exception { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse(fileName); return doc; } private NodeList readXMLNodes(Document doc, String xpathExpression) throws Exception { XPath xpath = XPathFactory.newInstance().newXPath(); XPathExpression expr = xpath.compile(xpathExpression); Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result; return nodes; } public static void main(String[] args) { xml m = new xml(); Document doc; NodeList nodes = null; try { doc = m.createXMLDocument("src/file.xml"); nodes = m.readXMLNodes(doc, "//series/season[@id='1']"); } catch (Exception e) { // TODO Auto-generated catch block System.out.println("nodo non esistente"); } System.out.println(nodes.item(0).getChildNodes().item(0).getTextContent()); //System.out.println(nodes.item(0).getChildNodes().getLength()); }
Guardando l'xml i nodi presenti nella season 1 sono 13 ma se faccio un prinln di nodes.item(0).getChildNodes().getLength() ne trova 27.
Se invece voglio stamparmi il contenuto di un nodo presente su season 1 faccio nodes.item(0).getChildNodes().item(0).getTextConte nt() però non stampa nulla, se faccio nodes.item(0).getChildNodes().item(1).getTextConte nt() stampa il contenuto del primo nodo cioè Pilota spaziale 3000... noto che non vi è alcuna progressione, se provo a stampare l'item(2) non stampa nulla, con item(3) ottengo il secondo nodo e cosi via... c'è questa alternanza... qualcuno riesce a spiegarmi dove sbaglio??

Rispondi quotando