Re: [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: Re: [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: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 5 Feb 2021 16:54:16 -0000
Use the fn:path() function in XPath 3.x.

Michael Kay
Saxonica

> On 5 Feb 2021, at 16:36, Roger L Costello costello@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> 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