Question

J'ai un fichier xml dans lequel il y a balise à savoir Il porte soit « M » ou « F » comme données, maintenant mon travail est de tester la valeur et écrire <Gender_Tag>Male</Gender_Tag> ou <Gender_Tag>Female</Gender_Tag> selon les valeurs M ou F respectivement .. J'ai essayé ce code .. Il travaillait dans d'autres circonstances ..

Était-ce utile?

La solution

Tous les chemins relatifs exprimés dans un modèle sont évalués par rapport au noeud courant. Votre template match éléments de genre, de sorte que Sexe = 'M' retourne vrai s'il y a un Sexe de enfant nommé 'genre' avec la valeur 'M'. Je suppose que ce n'est pas le cas ...

Utilisez ce point pour exprimer le noeud courant (ici un élément du genre):

<xsl:template match="root/details/Gender">
  <Gender_Tag>  
    <xsl:choose>
      <xsl:when test=".='M'">
        <xsl:text>Male</xsl:text>
      </xsl:when>
      <xsl:otherwise>
       <xsl:text>Female</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </Gender_Tag>
</xsl:template>

EDIT: Vous pouvez utiliser deux modèles trop

<xsl:template match="root/details/Gender[.='M']">
  <Gender_Tag>Male</Gender_Tag>
</xsl:template>
<xsl:template match="root/details/Gender[.='F']">
  <Gender_Tag>Female</Gender_Tag>
</xsl:template>

Autres conseils

Non testé, mais il peut travailler ...

<xsl:template match="root/details/Gender">
  <xsl:if test="text()='M'">
    <Gender_Tag>Male</Gender_Tag>
  </xsl:if>
  <xsl:if test="text()='F'">
    <Gender_Tag>Female</Gender_Tag>
  </xsl:if>
</xsl:template>
<xsl:template match="root/details/Gender">
    <xsl:choose>
        <xsl:when test="normalize-space(text())='M'">
            <Gender_Tag>Male</Gender_Tag>
        </xsl:when>
        <xsl:otherwise>
            <Gender_Tag>Female</Gender_Tag>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

Mon exemple diffère en deux points de Scoregraphic de:

  1. Il utilise xsl: choose pour assurer, que seul un élément Gender_Tag est créé (cela signifie aussi que si le texte est pas « M », il est toujours une femme)

  2. L'utilisation de bandes de normalize-space() espace blanc autour du contenu du texte de l'élément.

Sans voir XML il est difficile d'être certain, mais je pense que votre XSLT exemple devrait être:

<xsl:template match="root/details/Gender">    
   <xsl:if test=".='M'">
      <Gender_Tag><xsl:text>Male</xsl:text></Gender_Tag>
   </xsl:if>
   <xsl:if test=".='F'">
      <Gender_Tag><xsl:text>Female</xsl:text></Gender_Tag>
   </xsl:if>
</xsl:template>

Utilisation de choisir selon une autre réponse serait mieux (même si je pense qu'il devrait être deux explicites lorsque les clauses plutôt qu'un moment et un autre)

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