[xsl] How to generate a path expression which shows the namespace that each element on the path belongs to and the namespace that each namespace prefix is bound to?

Subject: [xsl] How to generate a path expression which shows the namespace that each element on the path belongs to and the namespace that each namespace prefix is bound to?
From: "Roger L Costello costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 5 Feb 2021 16:36:31 -0000
Hi Folks,

I have an XHTML document. Here is an example:

<html xmlns:o="urn:schemas-microsoft-com:office:office"
           xmlns="http://www.w3.org/TR/REC-html40";>
    <head>
        <title>Example</title>
    </head>
    <body>
        <p>
            <o:p></o:p>
        </p>
    </body>
</html>

I want to show the path to each element. I can iterate over all nodes and use
ancestor-or-self along with string-join to show the path:

<xsl:for-each select="//*">
    <xsl:value-of select="string-join(for $i in (ancestor-or-self::*) return
name($i), '/')"/>
</xsl:for-each>

Here is one of the paths that is generated:

html/body/p/o:p

Unfortunately, that path expression is missing crucial information:

- html, body, p are in the http://www.w3.org/TR/REC-html40 namespace
- the "o" prefix is bound to the urn:schemas-microsoft-com:office:office
namespace

It is vital that I have that information because I want to generate XHTML
instances from the path expressions. For example, for the above path
expression I will generate:

<html xmlns="http://www.w3.org/TR/REC-html40";
           xmlns:o="urn:schemas-microsoft-com:office:office">
    <body>
        <p>
            <o:p></o:p>
        </p>
    </body>
</html>

How to generate a path expression which shows the namespace that each element
on the path belongs to and the namespace that each namespace prefix is bound
to?

/Roger

Current Thread