Utiliser l'API XPath pour extraire des données d'un document XML
Intégrer XML dans une application web
Utiliser les APIs Java pour XML à partir d'une servlet ou jsp
XPath permet d'adreser des éléments dans un document XML comme cela avait été vu lors des exercices sur XSLT.
Exemple d'expression XPath :
*/poisson[@type="Carpe"]
L'expression précedente séléctionne tous les éléments poisson avec un attribut type égal à Carpe ([@type="Carpe"]), quelle que soit leur profondeur dans le document (*/).
Pour utiliser les expressions Xpath dans un programme Java il faut utiliser un parser XML conforme à DOM2, Traversal & Range.
Dans notre cas, nous alons utiliser le parser XML Xerces 2 et le moteur de transformation XSLT Xalan 2.
Après avoir téléchargé les fichiers jar de Xerces et Xalan, ajouter les fichiers dans la variable d'environnement CLASSPATH après avoir enlevé les références à crimson.jar et au fichier xalan.jar livré avec crimson.
Pour utiliser les parsers, on utilisera une ligne commande du type :
javac -classpath D:\xml\lib\xercesImpl.jar;D:\xml\lib\xmlParserAPIs.jar;D:\xml\
lib\xalan.jar;D:\xml\lib\crimson.jar;D:\tomcat\common\lib\servlet.jar D:\\tomcat
\\webapps\\formation\\WEB-INF\\classes\\myTransformer.java
Le package principal pour utiliser Xpath est :
import org.apache.xpath.XPathAPI;
Le fichier SimpleDisplayXPath.java montre un exemple d'utilisation. Créer la classe correspondante et la tester.
L'exemple suivant montre comment générer du XML à partir d'une page JSP. Pratiquement il n'y a rien à faire si ce n'est importer les bons packages en début de fichier.
<%@ page language="java" contentType="text/html" %>
<%@ page import="javax.xml.transform.*"%>
<%@ page import="javax.xml.transform.stream.*"%>
<html>
<head>
<title>Afficher un document XML avec JSP</title>
</head>
<body>
<%
String docRoot = "../webapps/formation/xml/exemples/jsp-xml/";
String paramValue = request.getParameter("param");
String xmlFile = docRoot + request.getParameter("xml");
String xslFile = docRoot + request.getParameter("xsl");
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xslFile));
transformer.setParameter("param1", paramValue);
transformer.transform(new StreamSource(xmlFile), new StreamResult(out));
%>
</body></html>
Créer la JSP et tester.
Pour utiliser XML dans une servlet il faut comme pour une JSP importer les packages des APIs XML utilisées.
Pour qu'une servlet soit utilisable dans une application il faut qu'elle soit stockées dans le répertoire WEB-INF/classes (ou lib si c'est une archive JAR) de l'application et qu'elle soit déclarée dans le fichier WEB-INF/web.xml.
Créer la servlet et tester.
Améliorer la servlet précédente pour trouver une feuille de style (avec org.apache.xpath.XPathAPI) dans le document et l'appliquer (avec javax.xml.transform.*).
Si vous rencontrez des problèmes durant l'exécution des TPS, le formateur est là pour vous aider et expliquer !