Capisco da Google che ha più senso estrarre dati da XML utilizzando XPath piuttosto che utilizzando il ciclo DOM.Loop su nodi ed estrazione di valori di nodo secondario utilizzando XPath di Java
Al momento, ho implementato una soluzione utilizzando DOM, ma il codice è dettagliato e risulta disordinato e non gestibile, quindi mi piacerebbe passare a una soluzione XPath più pulita.
Diciamo ho questa struttura:
<products>
<product>
<title>Some title 1</title>
<image>Some image 1</image>
</product>
<product>
<title>Some title 2</title>
<image>Some image 2</image>
</product>
...
</products>
Voglio essere in grado di eseguire un ciclo for per ciascuno degli <product>
elementi, e all'interno di questo ciclo for, estrarre i valori dei nodi titolo e immagine.
Il mio codice è simile al seguente:
InputStream is = conn.getInputStream();
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(is);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("/products/product");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList products = (NodeList) result;
for (int i = 0; i < products.getLength(); i++) {
Node n = products.item(i);
if (n != null && n.getNodeType() == Node.ELEMENT_NODE) {
Element product = (Element) n;
// do some DOM navigation to get the title and image
}
}
Dentro il mio for
ciclo ricevo ogni <product>
come Node
, che viene gettato a un Element
.
Posso semplicemente usare la mia istanza di XPathExpression
per compilare ed eseguire un altro XPath
sul Node
o Element
?