|
Subject: Re: [xsl] Stumped on XPath From: Spencer Tickner <spencertickner@xxxxxxxxx> Date: Tue, 7 Feb 2006 14:40:17 -0800 |
Hi David,
Thanks for the response. Your solution does in fact work perfectly.
The only problem is when I move the refnote element around (I used
1,2,3 for testing purposes however in truth these are more on the
lines of 2341234, 245532139, etc.) I don't get the results I expect.
example
<?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="3"/></clause>
</manual>
<appendix>
<refnote id="1">This is the first reference</refnote>
<refnote id="3">This is the third reference</refnote>
</appendix>
<appendix>
<refnote id="2">This is the second reference</refnote>
</appendix>
</doc>
Should give
<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>
However I get
<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 B) </p>
</body></html>
Even though the id 3 is within the first (Appendix A) appendix element.
Any other thoughts would be appreciated
On 2/7/06, David Carlisle <davidc@xxxxxxxxx> wrote:
>
>
> The trick with doing cross references in XSLT is always generate the
> reference text _at the referenced node_ not on the referencing node.
> then you can easily get the same number in the reference and in the
> referenced heading. (Often by just calling a named template or special
> mode that just does the numbering.
>
> So at the referencing element, first follow the link, then generate the
> number:
>
> <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>
>
>
>
> $ saxon refid.xml refid.xsl
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html;
> charset=utf-8">
> </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 B)
> </p>
>
>
>
>
> </body>
> </html>
>
> ________________________________________________________________________
> This e-mail has been scanned for all viruses by Star. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> ________________________________________________________________________
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Stumped on XPath, David Carlisle | Thread | Re: [xsl] Stumped on XPath, Spencer Tickner |
| Re: [xsl] Stumped on XPath, David Carlisle | Date | Re: [xsl] Stumped on XPath, Spencer Tickner |
| Month |