hi all,
I have a problem with <xsl:key>, here is my xml and
sample output.
<root>
<text:p>
<bookmark-start id="bib1"/>
<user-field
name="bib-reference">Ref</user-field>
</text:p>
<text:p>
<user-field
name="sb:reference">BB</user-field>
</text:p>
<text:p>
<user-field
name="sb:contribution">Contribution</user-field>
</text:p>
<text:p>
<user-field
name="sb:authors">Authors</user-field>
</text:p>
<text:p>
<user-field
name="sb:author">Author</user-field>
<user-field
name="sb:given-name">Given-Name</user-field>
<user-text>A.</user-text>
<user-field
name="sb:surname">Surname</user-field>
<user-text>Andrade</user-text>
</text:p>
<text:p>
<user-field
name="sb:title">Title</user-field>
<user-text>Mathematics</user-text>
</text:p>
<text:p>
<user-field
name="sb:host">Host</user-field>
</text:p>
<text:p>
<user-field
name="sb:issue">Issue</user-field>
</text:p>
<text:p>
<user-field
name="sb:series">Series</user-field>
</text:p>
<text:p>
<user-field
name="sb:title">Title</user-field>
<user-text>Science</user-text>
</text:p>
<text:p>
<user-field
name="sb:volume-nr">Volume-nr</user-field>
<user-text>12</user-text>
</text:p>
<text:p>
<user-field
name="sb:date">Date</user-field>
<user-text>1988</user-text>
<bookmark-end id="bib1"/>
</text:p>
...............
</root>
output:
<bib-reference id="bib1">
<sb:reference>
<sb:contribution>
<ce:authors>
<ce:author>
<sb:given-name>A.</sb:given-name>
<sb:surname>Andrade</sb:surname>
</ce:author>
</ce:authors>
<sb:title>Mathematics</sb:title>
</sb:contribution>
<sb:host>
<sb:issue>
<sb:series>
<sb:title>Science</sb:title>
<sb:volume-nr>12</sb:volume-nr>
</sb:series>
<sb:date>1988</sb:date>
</sb:issue>
</sb:host>
</sb:reference>
</bib-reference>
.....................
my problem is, I want to create an index containing
all the nodes from <bookmark-start> to <bookmark-end>
with their corresponding id's, then from that,
separate all the nodes from <bb> to <host> then from
<host> to <date>. I used <xsl:key> to create an index
for that, then used the <xsl:for-each> to process all
the nodes for every key that I created, is my
declaration with <xsl:key> and key() correct?
<xsl:key name="bookmark_start"
match="text:bookmark-start" use="@id"/>
<xsl:key name="bookmark_end"
match="text:bookmark-end" use="@id"/>
<xsl:key name="contribution"
match="text:user-field-get" use="@name"/>
<xsl:key name="h_issue"
match="text:user-field-get" use="@name"/>
<xsl:template match="bookmark-start">
<xsl:variable name="begin1"
select="key('bookmark_start',concat('bib',
$bib_number))[1] /ancestor-or-self::text:p[1]"/>
<xsl:variable name="end1"
select="key('bookmark_end',concat('bib',
$bib_number))[1]/ancestor-or-self::text:p[1]"/>
<xsl:variable name="biblio"
select="($begin1/following-sibling::node()|$begin1)[(.|following-sibling::*)[generate-id()=generate-id($end1)]]"/>
<xsl:variable name="contrib_start"
select="key('contribution','sb:contribution')[$biblio]/ancestor-or-self::text:p[$bib_number]"/>
<xsl:variable name="contrib_end"
select="key('contribution','sb:issue')[$biblio]/ancestor-or-self::text:p[$bib_number]"/>
<xsl:variable name="contrib_sample"
select="($contrib_start/following-sibling::node()|$contrib_start)[(.|following-sibling::*)[generate-id()=generate-id($contrib_end)]]"/>
<xsl:variable name="begin"
select="key('h_issue','sb:issue')[$bib_number]
/ancestor-or-self::text:p[$bib_number]"/>
<xsl:variable name="end"
select="key('h_issue','sb:date')[$bib_number]/ancestor-or-self::text:p[$bib_number]"/>
<xsl:variable name="sample"
select="($begin/following-sibling::node()|$begin)[(.|following-sibling::*)[generate-id()=generate-id($end)]]"/>
<xsl:for-each $biblio
<xsl:for-each $contrib_sample
</xsl:for-each>
<xsl:for-each $sample
</xsl:for-each>
</xsl:for-each>
</xsl:template>
thanks and regards.
aaron
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.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>
--~--