I'm interested in assigning the tag name of the root element in an xml document to an xslt variable. For instance, if the document looked like (minus the DTD):
<foo xmlns="http://....."> <bar>1</bar> </foo>
and I wanted to assign the string 'foo' to an xslt variable. Is there a way to reference that?
Thanks, Matt
Each XML document has exactly one single root element. It encloses all the other elements and is, therefore, the sole parent element to all the other elements. ROOT elements are also called document elements. In HTML, the root element is the <html> element.
The <xsl:stylesheet> element is typically the root element of an XSLT stylesheet.
Android "Valid XML document must have a root tag at line"
I think you want to retrieve the name of the outermost XML element. This can be done like in the following XSL sample:
<?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>
Please note that there is a slight difference in XPath terminology:
The top of the tree is a root node (1.0 terminology) or document node (2.0). This is what "/" refers to. It's not an element: it's the parent of the outermost element (and any comments and processing instructions that precede or follow the outermost element). The root node has no name.
See http://www.dpawson.co.uk/xsl/sect2/root.html#d9799e301
Use the XPath name()
function.
One XPath expression to obtain the name of the top (not root!) element is:
name(/*)
The name() function returns the fully-qualified name of the node, so for an element <bar:foo/>
the string "bar:foo" will be returned.
In case only the local part of the name is wanted (no prefix and ":"), then the XPath local-name()
function should be used.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With