Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get tag name of root element in an XML document w/ XSLT?

Tags:

xml

xslt

xpath

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

like image 392
Matty Avatar asked Dec 15 '08 15:12

Matty


People also ask

What is the name of the root element for this XML document?

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.

What is the root element in XSLT?

The <xsl:stylesheet> element is typically the root element of an XSLT stylesheet.

Does XML document have root tag?

Android "Valid XML document must have a root tag at line"


2 Answers

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

like image 135
Dirk Vollmar Avatar answered Nov 07 '22 03:11

Dirk Vollmar


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.

like image 29
Dimitre Novatchev Avatar answered Nov 07 '22 02:11

Dimitre Novatchev