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: Fri, 12 Dec 2008 15:48:42 +0530
Can somebody help me in solving this problem. Please

Regards,
Ganesh


On Thu, Dec 11, 2008 at 5:24 PM, Ganesh Babu N <nbabuganesh@xxxxxxxxx> wrote:
> 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