2008-12-03 4 views
3

Je souhaite générer des contrôles html à l'aide de xslt, mais je dois pouvoir nommer les contrôles pour pouvoir les récupérer lorsque le formulaire est publié. Je voudrais pouvoir nommer le bouton d'option "action_" + _case_id.Commandes html de sortie - nom du contrôle dynamique

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="data.xsl"?> 
<NewDataSet> 
    <Cases> 
    <Case> 
     <case_id>30</case_id> 
    </Case> 
    <Cases> 
</NewDataSet> 

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <div class="your_action"> 
     Your action:<br /> 
     <input type="radio" name="?" value="No" checked ="true"/> nothing to report<br /> 
     <input type="radio" name="?" value="Yes" /> memo to follow 
    </div> 
    </xsl:template> 
</xsl:stylesheet> 

Répondre

3

Utilisation:

 
<input type="radio" name="{concat('action_', /*/*/*/case_id)}" 
value="No" checked ="true"/> 

Dans le cas où votre document xml change, il peut être nécessaire de remplacer le « * "chars ci-dessus avec des étapes de localisation plus détaillées.

0
<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="data.xsl"?> 
<NewDataSet> 
    <Cases> 
    <Case> 
     <case_id>30</case_id> 
    </Case> 
    <Cases> 
</NewDataSet> 

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <xsl:variable name="actionid">action_<xsl:value-of select="Cases/Case/case_id"/></xsl:variable> 
    <div class="your_action"> 
     Your action:<br /> 
     <input type="radio" name="{actionid}" value="No" checked ="true"/> nothing to report<br /> 
     <input type="radio" name="{actionid}" value="Yes" /> memo to follow 
    </div> 
    </xsl:template> 
</xsl:stylesheet> 

REMARQUE: non testé. Vous voulez probablement ajouter un matcher spécifiquement pour le noeud Case, non seulement en correspondance avec le noeud racine.

0

Vous devez préfixer la variable avec un signe $ en référençant:

<input type="radio" name="{$actionid}" value="No" checked ="true"/> nothing to report<br /> 
0

Votre jeu de données a la bonne propriété que c'est un arbre, chaque nœud peut être identifié par son chemin dans l'arbre. Je dirais que le mieux est de nommer les contrôles qui correspondent à chaque noeud XML d'une manière qui reflète ceci:

  1. NewDataSet_Cases_Case1_case_id1_rb.
  2. NewDataSet_Cases_Case1_case_id2_rb.

Vous avez juste besoin d'un moyen d'obtenir les noms des nœuds parents, quelque chose comme:

&lt;xsl:variable name="parent1Name" 
       select="name(parent::*)" /&gt; 
Questions connexes