Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774

    xpath con librerie xerces

    salve a tutti,
    sto mettendo mano ad un applicativo che utilizza gia l'xml tramite le librerie xerces del gruppo apache...
    avrei bisono di utilizzare anche delle espressioni xpath...
    qualcuno sa dirmi quali sono, all'interno di questo package, le classi che devo utilizzare per
    fare questa cosa?
    sarebbe gradito anche quelache esempio ma mi accontenterei di sapere quali sono le classi...
    grazie mille
    citrus

  2. #2
    Per quel che ne so (ma potrei sbagliare), Xerces da solo non ti basta per utilizzare XPath, ma devi importare anche una libreria che implementi un motore XSLT, come ad esempio Xalan, sempre del progetto Apache.

    Ciao,

  3. #3
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    gia fatto
    sono riuscito ad usarlo ma ho un problema con un espressione..
    approfitto di questo thread gia aperto per chiedere a voi...

    questo è l'xml su cui eseguo la query:
    codice:
    <batch_factory>
    <batch name="CHN">
      ....
    </batch>
    <batch name="SCANIA">
      ....
    </batch>
    </batch_factory>

    e questo è il codice java che dovrebbe individuarmi il nodo che mi interessa:
    codice:
    DOMParser objXML = new DOMParser();
    objXML.parse("batchFactory.xml");
    Document doc = objXML.getDocument();
    String xpath="//batch[@name='SCANIA']";
    Node batchNode = XPathAPI.selectSingleNode(doc.getDocumentElement(), xpath);
    il fatto è che questa query ritorna sempre e solo il primo nodo...
    il che non è bello (ovviamente)...

    sapete dirmi come mai?

  4. #4
    Non capisco cosa intendi per primo nodo... La query che hai scritto ti restituisce correttamente il nodo batch il cui attributo name vale SCANIA, come richiesto nella query... Per leggere il valore dell'attributo fai un cast di Node ad Element e chiama il metodo getAttribute().

    Ciao,

  5. #5
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ciao,
    è come pensavo anche io..
    invece la query ritorna sempre e solo il primo nodo dell'albero...
    è come se trovasse tutto e poi, richiamando il metodo "selectSingleNode", ritornasse solo il primo in ordine...
    se infatti inverto l'ordine nell'xml e metto al primo posto il batch 'SCANIA' tira su quello...
    non capisco come mai...

  6. #6
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    allora.. un altro passo avanti..
    non era quella query a generare l'errore.
    Ho fatto delle verifiche e lui effettivamente mi tira su il nodo corretto.
    il problema dunque viene dopo, quando cerco di raccogliere i figli del nodo raccolto.
    in pratica una votla che ho determinato il nodo /batch[@name='SCANIA'] passo
    questo nodo ad un altro oggetto xpath per raccogliere altri valori.
    ed è qui che lui sembra tirar su i valori del primo nodo "batch".. quello 'CHN'..
    la cosa è apparentemente impossibile...
    perchè se io gli passo il nodo "batch SCANIA" lui mi tira su i sottoelementi del nodo "batch CHN"?



    questo è l'xml completo:
    codice:
    <batch_factory>
    	<batch name="CHN">
    		<package>app.batch.chn</package>
    		<class>ProcessCHN</class>
    		<paths>
    			<path>in</path>
    			<path>work</path>
    			<path>save</path>			
    			<path>out</path>
    		</paths>
    		<tracciati>
    			<tracciato>top.xml</tracciato>
    			<tracciato>detail.xml</tracciato>
    		</tracciati>												
    	</batch>
    <batch name="SCANIA">
    		<package>app.batch.scania</package>
    		<class>ProcessSCANIA</class>
    		<paths>
    			<path>in</path>
    			<path>work</path>
    			<path>save</path>			
    			<path>out</path>
    		</paths>
    		<tracciati>
    			<tracciato>top.xml</tracciato>
    			<tracciato>detail.xml</tracciato>
    		</tracciati>												
    	</batch>
    </batch_factory>

    e questo è il codice che fa l'estrazione:

    codice:
    String xpath="//batch[@name='SCANIA']";
    Node batchNode = XPathAPI.selectSingleNode(doc.getDocumentElement(), xpath);
    String className = XPathAPI.selectSingleNode(batchNode, "//class").getFirstChild().getNodeValue();
    nella stringa "className" mi troverò "ProcessCHN" invece che "ProcessSCANIA"..
    qualuno può dirmi come mai?
    come posso correggere?
    grazie
    citrus

  7. #7
    L'errore sta nella seconda espressione XPath. Se usi //class, con i due slash davanti, ti stai riposizionando sulla root del documento, perciò trovi il primo nodo. Per trovare il nodo class relativo a quello corrente devi usare semplicemente class, senza gli slash:

    codice:
    String className = XPathAPI.selectSingleNode(batchNode, "class").getFirstChild().getNodeValue();
    Ciao,

  8. #8
    Utente di HTML.it L'avatar di citrus
    Registrato dal
    Feb 2002
    Messaggi
    774
    ora funziona
    grazie mille!
    citrus

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.