Je souhaite attribuer le nom de balise de l'élément racine d'un document xml à une variable xslt. Par exemple, si le document ressemblait (moins la DTD):
<foo xmlns="http://.....">
<bar>1</bar>
</foo>
et je voulais assigner la chaîne 'foo' à une variable xslt. Y a-t-il un moyen de faire référence à cela?
Merci, Matt
Je pense que vous voulez récupérer le nom de l'élément XML le plus à l'extérieur. Cela peut être fait comme dans l'exemple XSL suivant:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="outermostElementName" select="name(/*)" />
<xsl:template match="/">
<xsl:value-of select="$outermostElementName"/>
</xsl:template>
</xsl:stylesheet>
Veuillez noter qu'il existe une légère différence dans la terminologie XPath:
Le sommet de l'arborescence est un nœud racine (terminologie 1.0) ou un nœud de document (2.0). C'est ce à quoi "/" fait référence. Ce n'est pas un élément: c'est le parent de l'élément le plus à l'extérieur (et tous les commentaires et instructions de traitement qui précèdent ou suivent l'élément le plus à l'extérieur). Le nœud racine n'a pas de nom.
Utilisez la fonction XPath name()
.
Une expression XPath pour obtenir le nom de l'élément supérieur (pas root!) Est:
name(/*)
La fonction name () renvoie le nom complet du nœud, donc pour un élément <bar:foo/>
La chaîne "bar: foo" sera retournée.
Dans le cas où seule la partie locale du nom est souhaitée (pas de préfixe et ":"), alors le XPath local-name()
la fonction doit être utilisée.
Deviner. Le nom de la fonction () donné le paramètre * retournera foo.
vous voulez local-name ()