|
Subject: Re: [xsl] Mapping from two sources From: sudheshna iyer <sudheshnaiyer@xxxxxxxxx> Date: Sun, 3 Oct 2010 05:04:05 -0700 (PDT) |
Amazing Martin! I replaced $doc2//POOrderLine with $doc2//POOrderLine and it
worked!
Thank you.
--- On Sun, 10/3/10, Martin Honnen <Martin.Honnen@xxxxxx>
wrote:
> From: Martin Honnen <Martin.Honnen@xxxxxx>
> Subject: Re: [xsl]
Mapping from two sources
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Date: Sunday,
October 3, 2010, 7:49 AM
> sudheshna iyer wrote:
> > Thank you for your
answers.
> > But the solution returns only elements from Doc1, I
> need
element of Doc2 if
> > doc1.OLN = doc2.OLN
> > ========
> > Problem
> >
> > I
need to have two sources:
> >
> > input1 and input2.
> > input1:
> > <?xml
version="1.0" encoding="ISO-8859-1"?>
> > <Order>
> > <OrderLine>
> >
> <OLN>1</OLN>
> >
> <Fname>aa</Fname>
> >
</OrderLine>
> > <OrderLine>
> >
> <OLN>2</OLN>
> >
>
<Fname>bb</Fname>
> >
> </OrderLine>
> > </Order>
> >
> >
> >
input2:
> > <?xml version="1.0" encoding="ISO-8859-1"?>
> > <POOrder>
> >
<POOrderLine>
> >
> <OLN>1</OLN>
> >
> <ID>123</ID>
>
>
> <LName>aa</LName>
> > </POOrderLine>
> > <POOrderLine>
> >
> <OLN>2</OLN>
> >
> <ID>324</ID>
> >
>
<LName>bb</LName>
> >
> </POOrderLine>
> > <POOrderLine>
> >
> <OLN>3</OLN>
> >
> <ID>456</ID>
> >
>
<LName>bb</LName>
> >
> </POOrderLine>
> > </POOrder>
> >
> > I need
the output from both sources combined. Please
> note that first two elements
are coming from input1 and
> thrid element is from input2. What is the optimal
way of
> doing this?
> >
> > <?xml version="1.0" encoding="ISO-8859-1"?>
> >
<OrderResponse>
> > <Oline>
> >
> <OLN>1</OLN>
> >
>
<Fname>aa</Fname>
> >
> <ID>123</ID>
> > </Oline>
> > <Oline>
> >
> <OLN>2</OLN>
> >
> <Fname>bb</Fname>
> >
>
<ID>324</ID>
> > </Oline>
> > </OrderResponse>
> > =====
> >
> > Solution
proposed:
> >
> > <xsl:for-each-group select="$doc1//OrderLine,
>
$doc2//POOrderline"
> > group-by="OLN">
> > <Oline>
> > <OLN><xsl:value-of
>
select="current-grouping-key()"></OLN>
> > <xsl:copy-of
select="current-group()/(FName,
> ID)"/>
> > </Oline>
> >
</xsl:for-each-group>
>
> It might simply be a problem of use the same
spelling and
> case for element names in the input and the stylesheet (i.e.
>
POOrderLine and not POOrderline) so try
>
> <xsl:stylesheet
> version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
xmlns:xs="http://www.w3.org/2001/XMLSchema"
> exclude-result-prefixes="xs">
>
> <xsl:output method="xml" indent="yes"/>
>
> <xsl:variable
name="doc1" select="/"/>
>
> <xsl:param name="doc2Url" as="xs:string"
>
select="'input2.xml'"/>
> <xsl:variable name="doc2"
>
select="doc($doc2Url)"/>
>
> <xsl:template match="/">
> <OrderResponse>
> <xsl:for-each-group
> select="$doc1//OrderLine, $doc2//POOrderLine"
>
group-by="OLN">
> <Oline>
>
> <OLN><xsl:value-of
>
select="current-grouping-key()"/></OLN>
> <xsl:copy-of
>
select="current-group()/(Fname, ID)"/>
> </Oline>
>
</xsl:for-each-group>
> </OrderResponse>
> </xsl:template>
>
>
</xsl:stylesheet>
>
> and then with your above samples you get
>
>
<OrderResponse>
> <Oline>
> <OLN>1</OLN>
> <Fname>aa</Fname>
>
<ID>123</ID>
> </Oline>
> <Oline>
> <OLN>2</OLN>
>
<Fname>bb</Fname>
> <ID>324</ID>
> </Oline>
> <Oline>
>
<OLN>3</OLN>
> <ID>456</ID>
> </Oline>
> </OrderResponse>
>
> --
>
Martin Honnen
> http://msmvps.com/blogs/martin_honnen/
>
>
--~------------------------------------------------------------------
>
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@xxxxxxxxxxxxxxxxxxxxxx>
> --~--
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Mapping from two sources, Martin Honnen | Thread | Re: [xsl] Mapping from two sources, Florent Georges |
| [xsl] How do I pass params from <xs, sudheshna iyer | Date | Re: [xsl] Mapping from two sources, Florent Georges |
| Month |