Re: [xsl] key from one file to another set of files

Subject: Re: [xsl] key from one file to another set of files
From: "Ganesh Babu N" <nbabuganesh@xxxxxxxxx>
Date: Thu, 11 Dec 2008 17:24:30 +0530
Yes mike you are correct. I am getting all the col[3] values in a single go.

But I am not getting the result. I have tried in different manner in
which i can able to fetch info from collection() files and which are
matching with col[1] value in the input but I am unable to get col[3]
and col[2] values which is matching with col[1].

Please guide. Here is my latest XSL:

<xsl:key name="order" match="/issues/articles/row/col[3]"
use="/issues/articles/row/col[1]"/>
	<xsl:template match="/" name="main">
		<xsl:variable name="index" select="."/>
	<cover-body>
<xsl:for-each select="collection('file:///D:/cover/sample
xmls/pageall/else/nima?select=*.xml;recurse=yes;on-error=ignore')">
	<xsl:variable name="a" select="."/>
	<xsl:if test="$a/article/item-info/aid =
document('input.xml')/issue/articles/row/col[1]">
	<para>
	<aid><xsl:value-of select="$a/article/item-info/aid"/></aid>
	<aug><xsl:apply-templates
select="$a/article/head/ce:author-group/ce:author"/>		<xsl:apply-templates
select="$a/article/head/ce:author-group/ce:collaboration"/></aug>
	<article><xsl:value-of select="$a/article/head/ce:title"/></article>
	<page><xsl:value-of
select="key('order',$a/article/item-info/aid,$index)"/></page>
</para>
</xsl:if>
</xsl:for-each>
</cover-body>
</xsl:template>

Regards,
Ganesh

On Wed, Dec 10, 2008 at 5:30 PM, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> The key() function searches the document containing the context node, unless
> you supply a third argument, in which case it searches the document (or
> subtree) identified in the third argument. You want
>
> <xsl:template match="/" name="main">
>  <xsl:variable name="index" select="."/>
>
>   ... then ...
>
>  <xsl:if test="key('order', '$a/article/item-info/aid', $index)">
>
> Except that you don't only want to test whether the article exists, you want
> to find the right row, and use it when you do
>
> <page>
> <xsl:value-of select="document('input.xml')/articles/row/col[3]"/>
> </page>
>
> because that is otherwise going to give you the third column of every row.
>
> Michael Kay
> http://www.saxonica.com/
>
>
>> -----Original Message-----
>> From: Ganesh Babu N [mailto:nbabuganesh@xxxxxxxxx]
>> Sent: 10 December 2008 11:48
>> To: XSL
>> Subject: [xsl] key from one file to another set of files
>>
>> Dear All,
>>
>> input.xml
>>
>> <articles>
>>    <row>
>>          <col>4039</col>
>>          <col>Review Articles</col>
>>          <col>1</col>
>>       </row>
>>       <row>
>>          <col>3957</col>
>>          <col>Review Articles</col>
>>          <col>9</col>
>>       </row>
>>       <row>
>>          <col>3986</col>
>>          <col>Papers</col>
>>          <col>22</col>
>>       </row>
>>       <row>
>>          <col>3985</col>
>>          <col>Papers</col>
>>          <col>29</col>
>>       </row>
>> </articles>
>>
>> x number of article.xml files with content:
>>
>> 1.xml
>>
>> <article>
>> <aid>4039</aid>
>> <author>nnn</author>
>> <title>xxxxx<title>
>> </article>
>>
>> 2.xml
>>
>> <article>
>> <aid>3957</aid>
>> <author>nnn</author>
>> <title>xxxxx<title>
>> </article>
>>
>> 3.xml
>>
>> <article>
>> <aid>3986</aid>
>> <author>nnn</author>
>> <title>xxxxx<title>
>> </article>
>>
>> 4.xml
>>
>> <article>
>> <aid>3985</aid>
>> <author>nnn</author>
>> <title>xxxxx<title>
>> </article>
>>
>> Required output:
>>
>> <cover-body>
>> <section>
>> <section-title>Review Articles</section-title>
>> <para><aid>4039</aid> <author>nnn</author>
>> <title>xxxxx<title> <page>1</page></para>
>> <para><aid>3957</aid> <author>nnn</author>
>> <title>xxxxx<title> <page>9</page></para> </section>
>> <section> <section-title>Papers</sectitle>
>> <para><aid>3986</aid> <author>nnn</author>
>> <title>xxxxx<title> <page>1</page></para>
>> <para><aid>3985</aid> <author>nnn</author>
>> <title>xxxxx<title> <page>9</page></para> </section> <cover-body>
>>
>> XSL:
>> <xsl:template match="/" name="main">
>> <cover-body>
>>                       <xsl:for-each
>> select="collection('file:///D:/cover/sample
>> xmls/pageall/else/nima?select=*.xml;recurse=yes;on-error=ignore')">
>>                               <xsl:variable name="a" select="."/>
>>                               <xsl:if test="key('order',
>> '$a/article/item-info/aid')">
>>                               <xsl:if
>> test="(document('input.xml')/articles/row/col[2])[1]">
>>                               <section>
>>                               <section-title><xsl:value-of
>> select="."/></section-title>
>>                               <para>
>>                                       <aid>
>>                                               <xsl:value-of
>> select="$a/article/item-info/aid"/>
>>                                       </aid>
>>                                       <aug>
>>
>> <xsl:apply-templates
>> select="$a/article/head/ce:author-group/ce:author"/>
>>                                       </aug>
>>                                       <article>
>>                                               <xsl:value-of
>> select="$a/article/head/ce:title"/>
>>                                       </article>
>>                                       <page>
>>                                               <xsl:value-of
>> select="document('input.xml')/articles/row/col[3]"/>
>>                                       </page>
>>                               </para>
>>                               </section>
>>                               </xsl:if>
>>                               </xsl:if>
>>                       </xsl:for-each>
>>               </cover-body>
>> </xsl:template>
>>
>> The key is not working for me. i have tried adding the
>> document() in the match but it is showing the error.
>>
>> Regards,
>> Ganesh

Current Thread