[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: double document merge using keys
Subject: Re: double document merge using keys
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Thu, 24 Jun 2010 21:42:56 +0100
|
By default, if you compare two untyped attributes using gt with an XSLT
2.0 processor, it compares them as strings, not as numbers. You should
either make your processing schema-aware so it knows these attributes
are numbers, or you should force them to be numbers by explicit casting.
Michael Kay
Saxonica
On 24/06/2010 19:58, Terry Ofner wrote:
Okay, when I try this template, I get unusual return.
<xsl:variable name="stand2page" select="document('teks2page2.xml')"/>
<xsl:template match="chapter">
<xsl:for-each select="Chapterlesson">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
<xsl:variable name="localStart" select="startNum"/>
<xsl:variable name="localEnd" select="endNum"/>
<xsl:for-each select="$stand2page">
<range><xsl:copy-of select="$stand2page/standards/stand[@startNum>= $localStart and @startNum<= $localEnd]"/></range>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</xsl:template>
Everything is good until we get to the triple digits:
<Chapterlesson code="6.1.2">
<ch>1</ch>
<lesson>Collaborating Through the Writing Process</lesson>
<startNum>13</startNum>
<endNum>32</endNum>
<range>
<stand startNum="13" endNum="14">14.A.2</stand>
<!--I removed a bunch from here-->
<stand startNum="30" endNum="30">14.D.3</stand>
<stand startNum="31" endNum="31">14.E.3</stand>
<stand startNum="132" endNum="132">16.A.2</stand>
<stand startNum="133" endNum="133">14.A.1</stand>
<!--many more like thes-->
</range>
</Chapterlesson>
Something is going wrong with the math. Is it seeing startNum="133" and seeing 13 or something?
On Jun 24, 2010, at 10:46 AM, Martin Honnen wrote:
Terry Ofner wrote:
I have a set of standards that need to be aligned with each lesson. The standards are coded to the page, not the lesson. Here is a snippet of the current xml of standardDoc.xml:
<standards>
<stand startNum="5" endNum="5">19.A.4</stand>
<stand startNum="11" endNum="11">14.D.2</stand>
<stand startNum="11" endNum="11">14.D.3</stand>
<stand startNum="13" endNum="14">14.A.2</stand>
<stand startNum="15" endNum="15">14.A.1</stand>
<stand startNum="16" endNum="16">14.A.1</stand>
....
</standards>
The following stylesheet works as far as it goes. It only captures the standards that match the start page of the lesson. What I need is way to address standards with startNum>= $localStart and<= $localEnd. Is there a way to do this using keys?
<xsl:template match="Chapterlesson">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
<xsl:variable name="localStart" select="startNum"/>
<xsl:variable name="localEnd" select="endNum"/>
<xsl:for-each select="$stand2page">
<stand><xsl:copy-of select="key('standPage', $localStart)"/></stand>
</xsl:for-each>
I am not sure the a key helps with a less than/greater than condition but you could certainly use e.g.
<xsl:copy-of select="$stand2page/standards/stand[@startNum>= $localStart and @endNum<= $localEnd]"/>
to simply formulate the condition with XPath.
--
Martin Honnen
http://msmvps.com/blogs/martin_honnen/

|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|