|
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:41:09 -0000 |
Martin,
Why can't I do something like this? But below one i*s NOT working .. *
*I need to know how to select amount based on the supplied order num: *
<xsl:value-of select="$Orders_Part2/orders*/order_num[$ordernum]*
/amount"/> ==> not working
==================
<xsl:param name="doc2" select="document(Orders_Part2.xsl)"/>
<xsl:template match="/">
<OrdersEmailInputMsg>
<EmailOrdersInfo>
<Orders>
<xsl:for-each select="$doc2/order">
<order>
<OrderNumber>
<xsl:value-of select="order_number"/>
</OrderNumber>
<Product>
<xsl:value-of select="porduct_id"/>
</Product>
<Amount>
<xsl:variable name="amt">
<xsl:call-template name="getAmount">
<xsl:with-param name="ordernum" select="order_number"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$amt"/>
</Amount>
</Order>
</xsl:for-each>
</Orders>
</EmailOrdersInfo>
</OrdersEmailInputMsg>
</xsl:template>
<xsl:template name="getAmount">
<xsl:param name="ordernum"/>
<xsl:value-of
select="$Orders_Part2/orders/order_num[$ordernum]/amount"/>
</xsl:template>
==================
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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Merge 2 xmls : Loop throu, Prady Prady prady.ch | Thread | Re: [xsl] Merge 2 xmls : Loop throu, Martin Honnen martin |
| [xsl] XSL-List Guidelines, B Tommie Usdin btusd | Date | Re: [xsl] Merge 2 xmls : Loop throu, Martin Honnen martin |
| Month |