web-dev-qa-db-fra.com

Comment obtenir le nom de balise de l'élément racine dans un document XML avec XSLT?

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

24
Matty

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.

Voir http://www.dpawson.co.uk/xsl/sect2/root.html#d9799e301

25
Dirk Vollmar

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.

21
Dimitre Novatchev

Deviner. Le nom de la fonction () donné le paramètre * retournera foo.

2
Matty

vous voulez local-name ()

0
annakata