xsl-list
[Top] [All Lists]

Re: Stumped on XPath

2006-02-13 14:27:56
Ok, I seem to have got it. I changed the key to read <xsl:key name="r"
match="appendix" use="refnote/@id"/>... After testing 5 or 6 test
scenarios it's giving me exactly what I want. Thank you both so much
for the help.

Cheers

On 2/13/06, Spencer Tickner <spencertickner(_at_)gmail(_dot_)com> wrote:
Hi Wendell,

Thanks for the write back, here's the xslt code..
<xsl:stylesheet version="1.0"
             xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:key name="r" match="refnote" use="@id"/>

<xsl:template match="doc">
<html>
<head/>
<body>
 <xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match="sentence">
 <p><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="clause">
 <p class="clause"><xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="strong">
<strong><xsl:apply-templates/></strong>
</xsl:template>
<xsl:template match="appendix"/>
<xsl:template match="id">
<xsl:for-each select="key('r',@ref)">
 <xsl:text> (see Appendix </xsl:text>
 <xsl:number format="A"/>
 <xsl:text>) </xsl:text>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

I'll give a shot at trying to switch his code to count the appendix instead.

thanks,

Spencer

On 2/13/06, Wendell Piez <wapiez(_at_)mulberrytech(_dot_)com> wrote:
Hi Spenser,

If you posted your original XSLT which David fixed, that would help,
but I think I remember it well enough -- David's suggestion should
work cleanly as long as you say

<xsl:number from="appendix"/>

instead of the <xsl:number/> he guessed at.

The principle he elucidated, namely that you traverse to the
referenced node and do the operation there, still applies.
<xsl:number/> (in some configuration) spares you all the work of
counting things using explicit XPath. The only tricky part is getting
the xsl:number set up to give what you want. In this case, unless you
say you want to count the appendix elements, it uses the default,
which is counting the refnote elements themselves, in their local
context (i.e. each one inside its parent). This gives you "1" (i.e.
"A") for refnotes 1, 2, and 4, which are each the first refnotes in
their parents. (refnote 3 will get you "B"). By switching this to
count the appendixes you should get "A" for refnote 1, "B" for
refnotes 2 and 3, and "C" for 4.

Cheers,
Wendell

At 04:03 PM 2/13/2006, you wrote:
Hi Wendell and David,

Sorry I was out of town on a course. I do agree that the solution that
David suggested is cleaner, however it only works with the original
xml. Sorry if the second example was obscure, perhaps this demostrates
it better:

XML

<?xml version="1.0"?>
<doc>
 <manual>
 <sentence>This is a sentence with a reference<id ref="1"/> as an
inline element</sentence>
    <clause>This is a clause with inline elements <strong>
and</strong> a reference <id ref="4"/></clause>
</manual>
<appendix>
 <refnote id="1">This is the first reference</refnote>
 </appendix>
 <appendix>
 <refnote id="2">This is the second reference</refnote>
<refnote id="3">This is the third reference</refnote>
</appendix>
<appendix>
        <refnote id="4">This is the third reference</refnote>
 </appendix>
</doc>

Should produce:

<html><head><META http-equiv="Content-Type" 
content="text/html"></head><body>
 <p>This is a sentence with a reference (see Appendix A)  as an
inline element</p>
    <p class="clause">This is a clause with inline elements <strong>
and</strong> a reference  (see Appendix C) </p>
</body></html>

But instead produces:

<html><head><META http-equiv="Content-Type" 
content="text/html"></head><body>
 <p>This is a sentence with a reference (see Appendix A)  as an
inline element</p>
    <p class="clause">This is a clause with inline elements <strong>
and</strong> a reference  (see Appendix A) </p>
</body></html>

I'm sure it's something small I'm missing on my end. I do agree that
this would be a much better solution, so any thoughts would be
appreciated


======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
   Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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