Subject: Re: Help with Transformation
From: Steve <subsume@xxxxxxxxx>
Date: Mon, 29 Oct 2007 15:22:54 -0400
|
I must say, your source XML is a little funky. In particular I am
talking about the Address nodes and their corresponding Zip nodes.
Correlating them simply by their order isn't necessarily the best way
to do it, nor (as I recall) will the order *always* be respected,
depending on your processor.
I attempted to come up with a full solution for you. May work in a
rickety manner or not at all. As Ken says, because your problem is so
open-ended a better subject for this thread might be 'Someone do this
for me'. Luckily, I have a soft-spot for people who learn by example.
<xsl:template match="/">
<ListOfCustomers>
<xsl:apply-templates select="CustomerSet" />
</ListOfCustomers>
</xsl:template>
<xsl:template match="CustomerSet">
<xsl:apply-templates select="AddressSet/Address[1]" />
</xsl:template>
<xsl:template match="Address">
<MyCustomer>
<Id><xsl:value-of
select="/Customer/CustomerAccount/ResponseHeader/CorrelationId /></Id>
<AccoutName><xsl:value-of select="../../CustomerName" /></AccountName>
<BillMonth><xsl:value-of select="../As/Above" /></BillMonth>
<Product><!-- as above --></Product>
<Address><xsl:value-of select="Address" /></Address>
<Zip><xsl:value-of select="../ZipSet/Zip[position() =
current()/position()]" /></Zip>
<!-- I'm honestly not sure if the above wrangling is legal. -->
</MyCustomer>
</xsl:template>
On 10/29/07, Avaneesh Ramprasad <avaneesh@xxxxxxxxxxxxxx> wrote:
>
> Iam fairly new to xsl and iam stuck, i would greatly appreciate if someone could help me out here, below are the input and output xml documents
>
> Input xml
> <Customer>
> <CustomerAccount>
> <ResponseHeader>
> <CorrelationId>1234</CorrelationId>
> </ResponseHeader>
> <ResponseStatus>
> <Status>Success</Status>
> </ResponseStatus>
> <CustomerSet>
> <CustomerName>Pizza Hut</CustomerName>
> <Product>Product 1</Product>
> <PurchaseMonth>October 2007</PurchaseMonth>
> <AddressSet>
> <Address>1 main st</Address>
> <Address>2 river st</Address>
> <Address>3rd st</Address>
> </AddressSet>
> <ZipSet>
> <Zip>199360</Zip>
> <Zip>94596</Zip>
> <Zip>07974</Zip>
> </ZipSet>
> </CustomerSet>
> <CustomerSet>
> <CustomerName>Dominos</CustomerName>
> <Product>Product 2</Product>
> <PurchaseMonth>October 2007</PurchaseMonth>
> <AddressSet>
> <Address>21 Elm Road</Address>
> <Address>55 Green St</Address>
> </AddressSet>
> <ZipSet>
> <Zip>2583</Zip>
> <Zip>48818</Zip>
> </ZipSet>
> </CustomerSet>
> </CustomerAccount>
> <Customer>
>
> Below should be my output after transformation
> <ListOfCustomers>
> <MyCustomer>
> <Id>1234</Id>
> <AccountName>Pizza Hut</AccountName>
> <BillMonth>October 2007</BillMonth>
> <Product>Product 1</Product>
> <Address>1 main st</Address>
> <Zip>199360</Zip>
> </MyCustomer>
> <MyCustomer>
> <Id>1234</Id>
> <AccountName>Pizza Hut</AccountName>
> <BillMonth>October 2007</BillMonth>
> <Product>Product 1</Product>
> <Address>2 river st</Address>
> <Zip>94596</Zip>
> </MyCustomer>
> <MyCustomer>
> <Id>1234</Id>
> <AccountName>Pizza Hut</AccountName>
> <BillMonth>October 2007</BillMonth>
> <Product>Product 1</Product>
> <Address>3rd st</Address>
> <Zip>07974</Zip>
> </MyCustomer>
> <MyCustomer>
> <Id>1234</Id>
> <AccountName>Dominos</AccountName>
> <BillMonth>October 2007</BillMonth>
> <Product>Product 2</Product>
> <Address>21 Elm Road</Address>
> <Zip>2583</Zip>
> </MyCustomer>
> <MyCustomer>
> <Id>1234</Id>
> <AccountName>Dominos</AccountName>
> <BillMonth>October 2007</BillMonth>
> <Product>Product 2</Product>
> <Address>55 Green St</Address>
> <Zip>48818</Zip>
> </MyCustomer>
> </ListOfCustomers>
>
> Thank you for all your help in advance.
|