[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: error testing id() in external document

Subject: Re: error testing id() in external document
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 19 Oct 2007 13:24:06 -0400
Re:  error testing id() in external document
At 2007-10-20 05:56 +1300, Trevor Nicholls wrote:
Using xsltproc (libxml), and thus inside an <xsl:stylesheet version="1.0">,

Note version="1.0"


the following template generates an error:

  <xsl:template match="jump[@srcfile]">
   <xsl:variable name="jfil" select="substring-before(@srcfile,'#')" />
   <xsl:variable name="jid" select="substring-after(@srcfile,'#')" />
   <!-- footnotes are an invalid external reference -->
   <xsl:if test="local-name(document($jfil,/)/id($jid)) = 'footnote'">

In version 1.0 the id() function can only be the first step of a location path ... it cannot be otherwise.


    <xsl:message terminate="yes">
     <xsl:text>Footnote reference to external document (</xsl:text>
     <xsl:value-of select="@srcfile" />
     <xsl:text> found in </xsl:text>
     <xsl:value-of select="$myfullself" />
    </xsl:message>
   </xsl:if>
  </xsl:template>

The error is:

  XPath error : Invalid expression
  xsl:if : could not compile test expression 'local-name(.. etc.

Is that really an invalid expression? Is there a valid expression that will
achieve the same thing?

Set the context one step at a time:


  <xsl:template match="jump[@srcfile]">
   <xsl:variable name="jfil" select="substring-before(@srcfile,'#')" />
   <xsl:variable name="jid" select="substring-after(@srcfile,'#')" />
   <xsl:variable name="srcfile" select="@srcfile"/>
   <!-- footnotes are an invalid external reference -->
   <xsl:for-each select="document($jfil,/)">
     <xsl:if test="local-name(id($jid)) = 'footnote'">
      <xsl:message terminate="yes">
       <xsl:text>Footnote reference to external document (</xsl:text>
       <xsl:value-of select="$srcfile" />
       <xsl:text> found in </xsl:text>
       <xsl:value-of select="$myfullself" />
      </xsl:message>
     </xsl:if>
   </xsl:for-each>
  </xsl:template>

I hope this helps.

. . . . . . . . . . . . . . Ken

--
Comprehensive in-depth XSLT2/XSL-FO1.1 classes: Austin TX,Jan-2008
World-wide corporate, govt. & user group XML, XSL and UBL training
RSS feeds:     publicly-available developer resources and training
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
Male Cancer Awareness Jul'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.