Re: [xsl] Merge 2 xmls : Loop through one xml and get elements from second xml

Subject: Re: [xsl] Merge 2 xmls : Loop through one xml and get elements from second xml
From: "Prady Prady prady.chin@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 1 Sep 2020 15:12:10 -0000
Thank you, Martin. I will try this.

On Tue, 1 Sep 2020 at 10:57, Martin Honnen martin.honnen@xxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Am 01.09.2020 um 15:51 schrieb Prady Prady prady.chin@xxxxxxxxx:
> > Is there any other simpler way..
>
> What do you consider simple or simpler? Using XSLT 2 or 3? Sure, go ahead
>
> <xsl:template match="order">
>    <xsl:copy>
>      <xsl:apply-templates select="@* | node(), key('order',
> $ordernumber, $doc2)/amount"/>
>    </xsl:copy>
> </xsl:template>
>
> >
> > All I have to do is:
> >
> > Loop thru first xml:
> > add elements from first xml
> > get  "amount" from second xml where order number matches and create this
> > Or
> >
> > Can you explain what is being done?
>
> The suggested approach processes the first XML with the identity
> transformation to copy everything, with the exception of of the "order"
> elements, where it additionally gets the "amount" from the second XML,
> using a key to establish the match and selection based on the order number.
>
>
> >      > But I need to use only XSLT 1.0
> >
> >     Declare
> >
> >     <xsl:param name="doc2" select="document('Orders_Part2.xml')"/>
> >
> >     and a key
> >
> >     <xsl:key name="order" match="order" use="order_number"/>
> >
> >     then use
> >
> >     <xsl:template match="order">
> >         <xsl:copy>
> >           <xsl:apply-templates select="@* | node()"/>
> >           <xsl:variable name="ordernumber" select="order_number"/>
> >           <xsl:for-each select="$doc2">
> >             <xsl:apply-templates select="key('order',
> >     $ordernumber)/amount"/>
> >           </xsl:for-each>
> >         </xsl:copy>
> >     </xsl:template>
> >
> >     plus the identity transformation
> >
> >     <xsl:template match="@* | node()">
> >         <xsl:copy>
> >           <xsl:apply-templates select="@* | node()"/>
> >         </xsl:copy>
> >     </xsl:template>
> >
> >
> >
> >      >>>     =================
> >      >>>     Merge 2 xmls : Loop through one xml and get elements from
> >     second xml
> >      >>>
> >      >>>     I have 2 xmls(Orders_Part1.xml,Orders_Part2.xml). I have to
> >     build the
> >      >>>     3rd xml ( Orders.xml) .

Current Thread