Search xmlns with xsl / xpath

I am trying to get a list of information for the root element of an XML document using a transform. The parts that I cannot understand are as follows:

How to get the default namespace url?

How can I get a list of each xmlns prefix and its associated URL?

Here is my xml file:

<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="/example.xsl"?> <foo:mytag xmlns="http://default.example.com/" xmlns:foo="http://foo.example.com/" xmlns:bar="http://bar.example.com"> </foo:mytag> 

And here is my xsl file:

 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" encoding="UTF-8" indent="yes" method="xml" omit-xml-declaration="no" version="1.0" /> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> default namespace - <b>???</b><br /> full tag name - <b><xsl:value-of select="name(*)"/></b><br /> xmlns for tag - <b><xsl:value-of select="namespace-uri(*)"/></b><br /> tag prefix - <b>???</b><br /> tag name - <b><xsl:value-of select="local-name(*)"/></b><br /> List of xmlns - <br /> ???? </body> </html> </xsl:template> 

This conversion is performed in the browser. Basically what I expect as a result:

 default namespace - http://default.example.com/ full tag name - foo:mytag xmlns for tag - http://foo.example.com/ tag prefix - foo tag name - mytag List of xmlns - - http://default.example.com/ foo - http://foo.example.com/ bar - http://bar.example.com/ 

Am I missing something obvious to fill in the missing data?

+4
source share
1 answer

I think this is about what you want. XSLT 1.0 - tested in XMLSpy

 <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> default namespace - <b><xsl:value-of select="*/namespace::*[not (name())]"/></b><br /> full tag name - <b><xsl:value-of select="name(*)"/></b><br /> xmlns for tag - <b><xsl:value-of select="namespace-uri(*)"/></b><br /> tag prefix - <b><xsl:value-of select="substring-before(name(*),':')" /></b><br /> tag name - <b><xsl:value-of select="local-name(*)"/></b><br /> List of xmlns - <br /> <xsl:for-each select="*/namespace::*"> <xsl:if test="not (name() = 'xml')"><xsl:text> </xsl:text> <xsl:value-of select="name()" /><xsl:text> - </xsl:text><xsl:value-of select="." /><br /> </xsl:if> </xsl:for-each> </body> </html> </xsl:template> 
+5
source

All Articles