Bonjour la communauté XML,
Avant toute chose, je débute totalement en XML/XSLT/XPath, soyez indulgents... (histoire de pas me faire incendier :p car mon problème serait "peut être" du XPath...)
Mon contexte : je cherche à transformer des documents EPML (EPC XML... des modèles proches du BPMN encodés en XML) en SVG pour avoir une visualisation graphique... Actuellement, un XSL de 2004 semble pouvoir faire ce travail, mais j'ai un mal fou à le faire correctement fonctionner, et je le débugge depuis quelques jours.
Il nécessite Xalan, que j'ai installé et réussi à faire fonctionner.
J'arrive à générer un SVG et des HTML, mais ceux-ci ne s'affichent pas, et surtout, certaines valeurs restent à NaN.
Après un peu de debug, je suis arrivé au fait qu'un des attributs n'est pas reconnu par le parser.
Voici le XSL actuel qui renvoie un NaN :
Voici le résultat sur le SVG & HTML :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <xsl:variable name="Ymax"> <xsl:choose> <xsl:when test=".//*[@y]"> <xsl:for-each select=".//*[@y]"> <xsl:sort select="number(@y)+number(@height)" data-type="number" order="descending"/> <xsl:if test="position()=1"> <xsl:value-of select="$Scaling*(number(@y)+number(@height))"/> </xsl:if> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:value-of select="1"/> </xsl:otherwise> </xsl:choose> </xsl:variable>
Code : Sélectionner tout - Visualiser dans une fenêtre à part <svg width="NaN" height="NaN" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:java="http://xml.apache.org/xslt/java">
En testant, @y me renvoie bien une valeur, mais @height non.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <p><b>EPC name: Lager</b><br/><b>Xmax: NaN</b><br/><b>Ymax: NaN</b><br/></p><EMBED TYPE="image/svg" name="SVG_map" src="epcId1.svg" width="NaN" height="NaN" border="1"/>
Je "pense" que ma difficulté vient du fait que je n'arrive pas à filtrer uniquement les lignes contenant un "y" et un "height" simultanément.
Dans les données que je lis en entrée dans mon EPML, il y a parfois ça :
Et parfois juste ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <position x="626" y="296" width="249" height="158"/>
Ne connaissant pas encore très bien XSL, je ne sais pas si le bout de XSL gère ou non déjà l'imbrication des balises "position"...
Code : Sélectionner tout - Visualiser dans une fenêtre à part <position x="750" y="454"/>
...ni si il est possible de tester plusieurs valeurs sur une même ligne de données. (apparemment for-each n'est pas bon pour ça ?)
Partager