2010-05-13 8 views
0

est ici la structure de mon XMLGet-nom local du nœud actuel dans XSL

<FileRoot> 
    <UserSet1> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     ... 
    </UserSet1> 
    <InactiveUsers> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     <User> 
      <FirstName></FirstName> 
      <LastName></LastName> 
     </User> 
     ... 
    </InactiveUsers> 
</FileRoot> 

Dans mon modèle XSL

<xsl:template match="/*/*"> 
    <File> 
     <xsl attribute name="Name"> 
      <xsl:value-of select="local-name(/*/*)"/> 
     </xsl:attribute> 
    </File> 
</xsl> 

Après la transformation, pour les deux UserSet1 et InactiveUsers, m'a donné « UserSet1 ". Les résultats attendus doivent être "UserSet1" pour UserSet1 et "InactiveUsers" pour InactiveUsers. Comment puis-je récupérer correctement la valeur?

Merci

Répondre

2

/*/* est un chemin absolu, donc local-name(/*/*) renverront toujours le nom local pour le premier noeud dans le document entier qui correspond à ce chemin absolu. Il semble que vous vouliez le nom local du nœud actuel. Dans ce cas, utilisez local-name() à la place. Si aucun argument n'est spécifié, le nœud de contexte actuel est utilisé.

En outre, vous pouvez utiliser un modèle de valeur d'attribut au lieu de xsl:attribute, comme suit:

<xsl:template match="/*/*"> 
    <File Name="{local-name()}"/> 
</xsl> 
+0

Exactement ce que je avais besoin. Merci!! – fishiefishie

Questions connexes