2008-12-02 9 views
3

Avec le XML ci-dessous, j'aimerais savoir comment obtenir la valeur du texte dans le nœud case_id en tant qu'attribut pour la balise d'entrée cachée dans la feuille xsl ci-dessous. Est-ce possible?Attribut de texte en tant que valeur pour un autre élément

<?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="/"> 
<input type="hidden" name="case_num" value="?"/> 
</xsl:template> 
</xsl:stylesheet> 

Répondre

4

il suffit de changer votre XSLT pour cela, cela suppose que vous n'avez seulement 1 case_id, sinon, vous devrez aller avec un match de modèle plus précis et enlever une partie du chemin de la valeur XPATH je par exemple.

<input type="hidden" name="case-num"> 
    <xsl:attribute name="value"> 
     <xsl:value-of select="/NewDataSet/Cases/Case/case_id" /> 
    </xsl:attribute> 
</input> 
2

Vous devez développer votre XSLT avec des correspondances plus spécifiques.

Les éléments suivants doivent afficher input éléments contenant vos valeurs case_id pour chaque Case. J'ai supposé qu'il y en a un case_id par Case. J'ai essayé de rendre le XSLT aussi explicite que possible, mais vous n'avez pas besoin d'être aussi précis dans votre implémentation si vous ne voulez pas l'être.

<xsl:template match="/"> 
    <xsl:apply-templates /> 
</xsl:template> 

<xsl:template match="Case"> 
    <xsl:element name="input"> 
     <xsl:attribute name="type"> 
      <xsl:text>hidden</xsl:text> 
     </xsl:attribute> 
     <xsl:attribute name="name"> 
      <xsl:text>case_num</xsl:text> 
     </xsl:attribute> 
     <xsl:attribute name="value"> 
      <xsl:value-of select="case_id"/> 
     </xsl:attribute> 
    </xsl:element> 
</xsl:template> 
+0

Pourquoi passer par tous les tracas des grands articles XSL plutôt que comme ce que j'ai énuméré –

+0

Comme je l'ai dit, je suis être aussi explicite comme je peux. De cette façon, les nouveautés de XSLT ne vont pas se demander si "input" est une commande XSLT ou non. Après tout, ce site est destiné à aider les gens, alors je voulais éliminer toute ambiguïté. –

5

Essayez cette

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <input type="hidden" name="case_num"> 
     <xsl:attribute name="value"> 
     <xsl:value-of select="/NewDataSet/Cases/Case/case_id/text()"/> 
     </xsl:attribute> 
    </input> 
    </xsl:template> 
</xsl:stylesheet> 

ou vous pouvez inline comme celui-ci

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <input type="hidden" name="case_num" value="{/NewDataSet/Cases/Case/case_id/text()}"/> 
    </xsl:template> 

0

je l'ai changé:

<input type="hidden" name="case-num"> 
    <xsl:attribute name="value"> 
     <xsl:value-of select="case_id" /> 
    </xsl:attribute> 
</input> 

comme dans une boucle foreach. Merci les gars, qui a travaillé un régal!

2

Just use an AVT (valeur d'attribut modèle) comme ceci:

<input type="hidden" name="case_num" value="{*/*/*/case_id}"/> 
Questions connexes