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

Re: Can someone explain this generate-id and key xsl

Subject: Re: Can someone explain this generate-id and key xsl fragment to me?
From: Michael Sokolov <msokolov@xxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 28 Feb 2014 13:45:41 -0500
Re:  Can someone explain this generate-id and key xsl
I don't see how that could ever work since it is comparing generate-id(.) (where . is in //errata_section) with generate-id (module_impacted), so those should never be equal?

generate-id() is an XSLT 1 hack that lets you compare based on element identity (rather than the more typical value comparison).

It's hard to be sure since your example is incomplete, but it looks as if the intent is to look up the module_impacted keys in an index somewhere else? I think you might want something like:

//errata_section[module_impacted=//module_index/module_impacted]

?

which could also probably be made faster using a key; maybe:

//errata_section[key('module-index',module_impacted)]

?

-Mike



On 2/28/14 1:17 PM, russurquhart1@xxxxxxxxxxx wrote:
Hi,

I'm having to manage an xslt that someone else wrote, that generally works correctly, but when it doesn't i have problems.

In one template that is a for-each command that is executed. The line is:

<xsl:for-each select="//errata_section[generate-id(.)=generate-id(key('module-index', module_impacted)[1])]">
  <xsl:sort select="module_impacted"/>

The xml it is processing are bugs of a form:

<errata_section>
.
. bug info.
.
<module_impacted>DSS</module_impacted>
<module_impacted>VPE</module_impacted>
<module_impacted>VIP</module_impacted>

</errata_section>

And there are hundreds of errata_section elements, each with a module_impacted element(s) reflecting, for the specific errata_section, those modules it impacts. There must be at least one module_impacted element per errata_section, but, as in the example above, there may be more.

The above line, is supposed to sort, and process each module_impacted element, outputting tables based on the value of the module_impacted element.

What i am seeing is, and i can't determine what is causing this, is certain module_impacted elements don't seem to get selected and processed. When the final output is generated some are missing altogether. For the example above, the above line should process, in due course, DSS, then later down the road, VIP, and then VPE. What i'm seeing in the debugger, is VIP and VPE not getting picked up or processed at all.

To complicate matters, when i use Stylus Studio to debug, using Saxon as the internal debugger, i get a different result than if i use libxslt. Both give incorrect output, but some are less incorrect than others. (The libxslt, seems to find VPE, but not VIP, but that is handled incorrectly as well.)

I guess if someone could help me to understand what the fragment is doing, maybe that would help me to better dubg this!

Thanks for any help!

Russ

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.