xsl-list
[Top] [All Lists]

[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?

2021-02-05 10:36:38
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
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--


<Prev in Thread] Current Thread [Next in Thread>