2008-12-15 6 views
21

Ich bin daran interessiert, den Tag-Namen des Wurzelelements in einem XML-Dokument zu einer XSLT-Variable zuzuweisen. Zum Beispiel sah, wenn das Dokument wie (minus der DTD):Wie erhält man den Tag-Namen des Wurzelelements in einem XML-Dokument mit XSLT?

<foo xmlns="http://....."> 
    <bar>1</bar> 
</foo> 

und ich wollte die Zeichenfolge ‚foo‘ zu einer Xslt Variablen zugewiesen werden. Gibt es eine Möglichkeit, darauf zu verweisen?

Danke, Matt

Antwort

23

Ich denke, Sie möchten den Namen des äußersten XML-Elements abrufen. Dies kann, wie in der folgenden XSL Probe durchgeführt werden:

<?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> 

Bitte beachten Sie, dass es ein kleiner Unterschied in XPath Terminologie:

Die Spitze des Baums ist ein Wurzelknoten (1,0-Terminologie) oder Dokumentknoten (2.0). Darauf bezieht sich "/". Es ist kein Element: Es ist das übergeordnete Element des äußersten Elements (und alle Kommentare und Verarbeitungsanweisungen , die dem äußersten Element vorangehen oder folgen). Der Root-Knoten hat keinen Namen.

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

2

Ich habe es herausgefunden. Der Funktionsname() für den Parameter * gibt foo zurück.

0
+1

@annakata: name() und local-name() sind unterschiedlich. Das OP will eindeutig name(). Nirgends sagt er, dass er den Namen jedes Namespacepräfixes entfernen lassen möchte. –

+0

Um fair zu sein, ich meine "das wird tun, was du willst" nicht "nur das ..." und nirgendwo im OP sagt er, dass er auch den Namensraum haben will. Ich weiß nicht wie es euch geht, aber nach meiner Erfahrung ist Local-Name genau das, woran ich in 90% der Fälle interessiert bin. Namespaces sind einer der Gründe, warum Leute XSLT hassen – annakata

16

die XPath name() Funktion verwenden.

Ein XPath-Ausdruck den Namen der oben erhalten wurde (keine Root!) Element:

              name(/*)

Der Name() gibt den vollständig qualifizierten Name des Knotens, so dass für ein Element <bar:foo/> der String "bar: foo" zurückgegeben wird. Wenn nur der lokale Teil des Namens gesucht wird (kein Präfix und ":"), sollte die XPath local-name() Funktion verwendet werden.

Verwandte Themen