Question

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

<?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>
Était-ce utile?

La solution

Remplacez simplement votre XSLT par ceci, cela suppose que vous n’avez que 1 case_id, sinon vous devrez utiliser une correspondance de modèle plus spécifique et supprimer une partie du chemin dans la valeur XPATH que j’ai utilisée à titre d’exemple.

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

Autres conseils

Essayez ceci

<?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 en ligne comme ceci

<?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>

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

Les éléments suivants doivent générer des éléments input contenant vos valeurs case_id pour chaque Case . J'ai supposé qu'il y 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>

Il suffit d'utiliser un AVT (Modèle de valeur d'attribut) comme ceci:

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

Je l'ai changé en:

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

comme il est dans une boucle foreach. Merci les gars, cela a fonctionné un régal!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top