From: Thierry Lasmartres (thierry.lasmartres@devoteam.com)
Date: 08/02/2001 - 17:08
Bonjour,
Dans mon XML à transformer, j'ai un noeud du style
<nom>Dupond</nom>
Avec le XSL je veux remplacer ce noeud par le résultat issu d'une fonction qui prend "Dupond" en argument
Avec Xalan, j' ai trouvé 2 manières de le faire :
1) Passer par une fonction en lui passant l'objet contextNodeList
<xsl:template match="nom" >
<xsl:value-of select="my-ext:setNom(.)"/>
</xsl:template>
Dans ma fonction, je dois alors faire :
function setNom(context)
{
if (context.item(0).getFirstChild()!= null) // Vérifie que le noeud est NON VIDE !
{ var contenu_du_noeud = context.item(0).getFirstChild().getNodeValue();}
....traitement...
}
2) Passer par un élément xalan (grosso-modo une fonction qui detient obligatoirement le contexte)
<xsl:template match="nom" >
<my-ext:setNom />
</xsl:template>
et mon élement ressemble à :
function setNom(xslproc, elem)
{
if (xslProc.sourceNode.getFirstChild()!=null)
{ var contenu_du_noeud = xslProc.sourceNode.getFirstChild().getData(); }
....traitement...
}
Finalement, c'est quand même bien lourd!
Avec Microsoft (non conforme W3C) :
<xsl:eval>setNom(this.text)</xsl:eval>
Le "this.text" est directement exploitable dans la fonction et le tout semble bien plus performant (5 fois + rapide!).
Alors je dois avoir l'esprit tordu! Il doit y avoir bien plus simple et plus rapide avec xalan!
Désolé pour la longueur et merci pour votre aide.
Thierry
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:05 UTC
webmaster@xmlfr.org
|