xsl-list
[Top] [All Lists]

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?

2021-02-05 10:54:22
Use the fn:path() function in XPath 3.x.

Michael Kay
Saxonica

On 5 Feb 2021, at 16:36, Roger L Costello costello(_at_)mitre(_dot_)org 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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


--~----------------------------------------------------------------
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>