Esempio completo di uso di XPath con le API di JAXP.
persone.xml
codice:
<?xml version="1.0" encoding="ISO-8859-1"?>
<persone>
<persona nome="Mario" cognome="Rossi" annoNascita="1952"/>
<persona nome="Roberta" cognome="Rossi" annoNascita="1935"/>
<persona nome="Carlo" cognome="Verdi" annoNascita="1975"/>
<persona nome="Giulio" cognome="Bianchi" annoNascita="1945"/>
<persona nome="Enrica" cognome="Rossi" annoNascita="1957"/>
</persone>
codice:
import java.io.*;
import javax.xml.xpath.*;
import org.xml.sax.*;
import org.w3c.dom.*;
public class Prova {
public static void main(String[] args) {
try {
XPathFactory factory = XPathFactory.newInstance();
XPath xPath = factory.newXPath();
String espressione = "/persone/persona[@cognome='Rossi'][@annoNascita>1950]";
InputSource is = new InputSource(new FileReader("persone.xml"));
Object result = xPath.evaluate(espressione, is, XPathConstants.NODESET);
NodeList list = (NodeList) result;
for (int i = 0; i < list.getLength(); i++) {
Element elem = (Element) list.item(i);
System.out.println(elem.getAttribute("nome"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
La espressione XPath prende tutti i 'persona' sotto 'persone' e tramite i due predicati sceglie solo i nodi in cui l'attributo cognome è "Rossi" e l'attributo annoNascita è maggiore di 1950.
Stampa:
Ma non stampa Roberta perché il secondo predicato non lo prende.