2009-09-18 11 views
0

je le fichier XML suivant:Comment définir des balises dans un corps de variable

<?xml version="1.0"?> 
<Table69> 
</Table69> 

et que vous voulez lire le corps de l'élément « Table69 », je l'ai utilisé le fichier XSL suivant:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml"/> 
    <xsl:template match="/">  
    <xsl:variable name="table" >  
     <xsl:choose> 
     <xsl:when test="normalize-space(.) != ''" > 
      <xsl:value-of select="." /> 
     </xsl:when> 
     <xsl:otherwise> 
      <Exception> 
       field was missing 
      </Exception>     
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:variable> 

    <Table id="69"> 
     <xsl:value-of select="$table" /> 
    </Table> 

    </xsl:template> 
</xsl:stylesheet> 

Le problème est: Lorsque le fichier xml contient une valeur sous Table69 tage, cette valeur est imprimée avec succès, mais; lorsque cette balise ne contient pas une valeur, la vairalbe xsl « table » doit contenir les éléments suivants:

<Exception> 
    field was missing 
</Exception>  

mais, il ne comprend pas tage, voici un exemple de résultat de la transformation:

<?xml version="1.0"?> 
<Table id="69"> 
    field was missing  <!-- where's the Exception tag surrounding the text field was missing ??? --> 
</Table> 

Répondre

3

xsl: value-of affiche la valeur textuelle du contenu sélectionné, utilise xsl: copy-of pour afficher le contenu entier, y compris les nœuds.

<xsl:copy-of select="$table" /> 
0

Effectuez les opérations suivantes au lieu de <Exception>:

<xsl:element name="Exception"> 
    <xsl:text>Field was missing</xsl:text> 
    </xsl:element> 

Cela devrait générer votre élément XML <Exception>. Supprimez les balises <xsl:text> si vous avez besoin de nouvelles lignes autour du texte.

+1

Malheureusement, la valeur-of affichera toujours la valeur de texte qui omettrait les nœuds. – Thiyagaraj

Questions connexes