2017-05-18 1 views
0

Je travaille avec un processus qui utilise une activité XSLTService pour transformer XML. Il devra consommer à la fois la source XML ordinaire ainsi que les variables de processus de type String et XML. Mon problème est que je ne peux pas comprendre comment insérer des variables de processus de type XML dans les modèles de source XSLT. Je n'ai aucun problème à insérer des variables de type String.Adobe AEM Forms: insertion d'une variable XML dans le modèle source XSLT

Ceci est la partie d'insertion de ma feuille de style:

<xsl:variable name="stringvariable" select="'{$/process_data/@stringVariable$}'"/> 
<xsl:variable name="externalNodes" select="'{$/process_data/inputNodeNames$}'"/> 

J'ai essayé d'insérer les données entre étiquette et fin de l'démarrage élément variable, mais cela n'a pas aidé. La variable de chaîne est insérée et plus tard imprimée avec succès pour la vérification.

J'ai également créé une variable locale (avec le même contenu que externe) pour référence:

<xsl:variable name="internalNodes"> 
    <root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <block>$.Formularmetadata</block> 
    <block>$.Sorteringsdata</block> 
    <block>$.Metadata</block> 
    <block>$.Verksamhetsdata</block> 
    </root> 
</xsl:variable> 

J'invoque ensuite count (exsl: node-set()) sur les deux variables XML dans le modèle, mais seul le local a une valeur supérieure à 0.

Comment puis-je faire en sorte que cela fonctionne?

/BS

PS. Ceci est la pleine feuille de style XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:variable name="stringvariable" select="'{$/process_data/@stringVariable$}'"/> 
<xsl:variable name="externalNodes" select="'{$/process_data/inputNodeNames$}'"/> 
<xsl:variable name="internalNodes"> 
    <root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <block>$.Formularmetadata</block> 
    <block>$.Sorteringsdata</block> 
    <block>$.Metadata</block> 
    <block>$.Verksamhetsdata</block> 
    </root> 
</xsl:variable> 

<!-- Identity rule.--> 
<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<!-- Rewrite attribute ref to work with new XML.--> 
<xsl:template match="*[local-name()='bind']/@ref"> 
    <xsl:value-of select="$stringvariable "/> 
    <xsl:value-of select="' Internal'"/><xsl:value-of select="count(exsl:node-set($internalNodes)/root/block)"/> 
    <xsl:value-of select="' External'"/><xsl:value-of select="count(exsl:node-set($externalNodes)/root/block)"/> 
</xsl:template> 
</xsl:stylesheet> 

Répondre

0

Après som plus experientation je trouve que si j'utilise une variable de chaîne pour transférer les données, il coutures à travailler. Je l'insère entre une balise de début et une balise de fin, puis je l'utilise après l'avoir intégré dans exsl: node-set() pour le faire fonctionner en XML.

point d'insertion:

<xsl:variable name="topNodes">'{$/process_data/@xmlTopNodes$}'</xsl:variable> 

Utilisation dans le modèle:

<xsl:variable name="match" select="exsl:node-set($topNoder)/root/block[starts-with(current(), .)]"/>