batik : lire un fichier svg
Bonjour à tous,
J'ai récemment débuté dans l'utilisation de batik pour lire des images svg mais j'ai des soucis pour récupérer à l'intérieur une balise en particulier.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package batik.test;
import java.io.File;
import java.io.IOException;
import javax.xml.xpath.XPathExpressionException;
import org.apache.batik.dom.AbstractDocument;
import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.svg.SVGDocument;
import org.w3c.dom.svg.SVGElement;
import org.w3c.dom.xpath.XPathResult;
public class CreateDocFromSVGFile {
public static void main(String[] args) throws XPathExpressionException {
try {
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
File file = new File("C://SVGs_input//figure_text.svg");
String uri = file.toURI().toString();
Document doc = f.createDocument(uri);
SVGDocument svgDocument = f.createSVGDocument(uri);
AbstractDocument ab = (AbstractDocument) svgDocument;
XPathNSResolver resolver = ab.createNSResolver(ab.getDocumentElement());
XPathResult result = (XPathResult) ab.evaluate("//text", svgDocument.getDocumentElement(), resolver, XPathResult.ANY_TYPE, null);
Node node = result.iterateNext();
while (node != null) {
System.out.println("<" + node.getNodeName() + "> " + node.getTextContent());
node = result.iterateNext();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
} |
L'expression "//*" me retourne bien toutes les balises mais dès que j'essaye autre chose de spécifique comme //title ou //text je n'obtiens rien du tout.
Je sais que le problème vient du namespace par défaut (xmlns:"http://www.w3.org/2000/svg") et j'ai réussi en passant par jdom à obtenir ce que je voulais grâce à l'expression "//svg:text" mais cela ne marche pas avec batik.
Je mets à disposition le fichier svg que l'on trouve sur la page de présentation de svg sur wikipédia :
Code:
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300" height="200">
<title>Exemple simple de figure SVG</title>
<desc>Cette figure est constituée d'un rectangle, d'un segment de droite et d'un cercle.</desc>
<rect width="100" height="80" x="0" y="70" fill="green" />
<line x1="5" y1="5" x2="250" y2="95" stroke="red" />
<circle cx="90" cy="80" r="50" fill="blue" />
<text x="180" y="60">Un texte</text>
<text x="180" y="60">Un autre texte</text>
</svg> |
Et le résultat avec "//*" en expression :
Citation:
svg
title
desc
rect
line
circle
text
text
Merci d'avance :)