XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Conferences Close Tree View
+ Stylus Studio Feature Requests (1192)
+ Stylus Studio Technical Forum (14621)
+ Website Feedback (249)
- XSLT Help and Discussion (7625)
-> + How to add page number in to v... (2)
-> + XSL Grouping (7)
-> + Repeat images using FOR EACH l... (7)
-> + How to get File name (2)
-> + image and text on the same lin... (2)
-> + Create XSLT stylesheets for us... (2)
-> + Merge Multiple Files While Che... (2)
-> + xslt 3 level or multi level gr... (6)
-> + How to create xsl which will c... (2)
-> + xsl:variable and Result Tree F... (7)
-> - XSL-FO fo:table continued from... (1)
-> + XSLT Java issue (2)
-> + problem with hyperlink (4)
-> + substring-after function probl... (4)
-> + Xalan Processing (3)
-> + Memory utilization high with m... (2)
-> + check all parent node groups s... (2)
-> + CSV DOC to XML CONVERSION (11)
-> + XSLT: Ordered List (based on r... (4)
-> + XSLT Mapping - Issue (4)
-> + XSL following-sibling, how to ... (5)
-> + need xslt elements help (2)
-> + Dynamic generation of URL in X... (2)
-> + List Created from Section Navi... (2)
-> + xslt elements help (2)
-> + Map field if source is not nul... (3)
-> + XSLT group and sort whith gene... (4)
-> + Nested XML value (2)
-> + Specifying condition with coun... (4)
-> + xsl:function using found in er... (4)
-> + How to remove an unwanted spac... (2)
-> + Question about variable substi... (2)
-> + XSL for Comparing nodes and di... (4)
-> + External lookup list (8)
-> + XSL HTML output now needs to b... (2)
-> + Adding a new sub element to th... (4)
-> + How do I get rid of 'Tip' node... (9)
-> + Trying to dynamically create n... (2)
-> + Display XML link, using XSLT a... (9)
-> + calling templates based on ord... (2)
-> + How to add internal links usin... (4)
-> + How to call user defined java ... (3)
-> + XSLT and WebApps past and futu... (3)
-> + passing condition through java... (3)
-> + Apllying a template from withi... (4)
-> + Getting xsl element in javascr... (3)
-> + The document() function inside... (3)
-> + Footnote text move to para (2)
-> + XSL: multiple element come to ... (3)
-> + How to use following-sibling &... (2)
-> + How to use FOP 0.95 with Stylu... (4)
-> + Error during creating PDF from... (2)
-> + Help creating a comma delimite... (4)
-> + Selective Add using XSLT recur... (3)
-> + Help: convert without parent e... (2)
-> - Correct my substring function ... (1)
-> + Old xsl into reports (4)
-> + How to save xslt converted fil... (3)
-> + How to find non tagging text? (5)
-> + Help: Hex entity to Character... (6)
-> + EDI QUOTES MESSAGE NEED TO REP... (2)
-> + How to convert in multi level ... (4)
-> + Need some help with a styleshe... (3)
-> - Conditional Formattinf Formula... (1)
-> + Creating HTML Unordered LIsts.... (2)
-> + xslt params uknown number of i... (2)
-> + How to use fonts other than ba... (2)
-> - Converting existing HTML into ... (1)
-> + Help to tune up this XSLT (2)
-> + XSLT - is only converting the ... (2)
-> + XSLT Editor tab (4)
-> + Convert multiple files from XM... (2)
-> + how to use in select expressi... (2)
-> + Help needed in XSL transformat... (2)
-> + How to add a string with math ... (5)
-> + How to add a string with math ... (6)
-> - br element (1)
-> + Stylesheet directed terminatio... (2)
-> + Who can help me whit sum funct... (2)
-> + XSLT Works in Stylus Studio, n... (3)
-> - Filter by Attribute (1)
-> + Display x number of items whic... (6)
-> + MultiColumn Reporting (3)
-> + cant get namespace declaration... (3)
-> + Performance xsl:for each and n... (3)
-> + How to assign value to a XSLT ... (3)
-> + Select element value based on ... (2)
-> + Version 10 of Saxon? (8)
-> + How to get the value of a node... (5)
-> + Display Xpath using (4)
-> + XSLT to report (2)
-> + xslt help for a noobie (2)
-> + XSL-FO XML to PDF with XSLT (3)
-> + Using XSLT to transform XML to... (4)
-> + XSLT to sort a list alphabetic... (4)
-> + How to Get Colum Values based ... (2)
-> + non persisting predicate filte... (5)
-> + HTML to XSLT (2)
-> + extra carriage returns in "csv... (2)
-> + extra carriage returns in "csv... (3)
-- Previous [301-320] [321-340] [341-360] Next
+ XQuery Help and Discussion (2017)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
Topic  
Posttop
Sameer ShadabSubject: Help in XSLT - A bit urgent
Author: Sameer Shadab
Date: 08 Jul 2005 07:08 PM
Hi

I have a requirement in XSLT, it is a bit lengthy. First of all let me give the source xml and the target output xml after transforming using XSLT and then explain the requirement.

Source XML

<?xml version="1.0" encoding="UTF-8"?>
<EDT20>
<IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
<CREDAT>20050708</CREDAT>
</EDI_DC40>
<E1EDT20 SEGMENT="1">
<Z1EDT20 SEGMENT="1">
<ZSHPCNTRY>US</ZSHPCNTRY>
<ZCURCOD>USD</ZCURCOD>
</Z1EDT20>
<Z1EDT20 SEGMENT="1">
<ZSHPCNTRY>US</ZSHPCNTRY>
<ZCURCOD>USD</ZCURCOD>
</Z1EDT20>
<E1EDL20 SEGMENT="1">
<BTGEW>6.200</BTGEW>
<GEWEI>LB</GEWEI>
<ANZPK>00001</ANZPK>
<E1ADRM1 SEGMENT="1">
<PARTNER_Q>WE</PARTNER_Q>
<PARTNER_ID>0004100357</PARTNER_ID>
<NAME1>COME CLEAN JANITORIAL</NAME1>
<COUNTRY1>US</COUNTRY1>
</E1ADRM1>
<E1ADRM1 SEGMENT="1">
<PARTNER_Q>OSO</PARTNER_Q>
<PARTNER_ID>0002</PARTNER_ID>
<NAME1>TENNANT</NAME1>
<COUNTRY1>US</COUNTRY1>
</E1ADRM1>
<E1EDL33>
<GRWCU>USD</GRWCU>
</E1EDL33>
<E1EDL47>
<SHIPACCT>560010</SHIPACCT>
<XSISRVC>03</XSISRVC>
<E1EDL48>
<XSIQUALF>BOOK1</XSIQUALF>
<VLABDATA>1234567</VLABDATA>
</E1EDL48>
<E1EDL48>
<XSIQUALF>PAGENR</XSIQUALF>
<VLABDATA>001</VLABDATA>
</E1EDL48>
<E1EDL48>
<XSIQUALF>ZCHARGTYPE</XSIQUALF>
<VLABDATA>PRE</VLABDATA>
</E1EDL48>
</E1EDL47>
<E1EDL37 SEGMENT="1">
<BRGEW>6.200</BRGEW>
<MEABM>INH</MEABM>
<E1EDL49>
<TRACKN>1Z5600100300083710</TRACKN>
</E1EDL49>
</E1EDL37>
</E1EDL20>
<E1EDL20 SEGMENT="1">
<BTGEW>6.200</BTGEW>
<GEWEI>LB</GEWEI>
<ANZPK>00001</ANZPK>
<E1ADRM1 SEGMENT="1">
<PARTNER_Q>WE</PARTNER_Q>
<PARTNER_ID>0004100357</PARTNER_ID>
<NAME1>COME CLEAN JANITORIAL</NAME1>
<COUNTRY1>US</COUNTRY1>
</E1ADRM1>
<E1EDL33>
<GRWCU>USD</GRWCU>
</E1EDL33>
<E1EDL47>
<SHIPACCT>560010</SHIPACCT>
<XSISRVC>03</XSISRVC>
<E1EDL48>
<XSIQUALF>BOOK1</XSIQUALF>
<VLABDATA>1234567</VLABDATA>
</E1EDL48>
<E1EDL48>
<XSIQUALF>PAGENR</XSIQUALF>
<VLABDATA>001</VLABDATA>
</E1EDL48>
<E1EDL48>
<XSIQUALF>ZCHARGTYPE</XSIQUALF>
<VLABDATA>PRE</VLABDATA>
</E1EDL48>
</E1EDL47>
<E1EDL37 SEGMENT="1">
<BRGEW>6.200</BRGEW>
<MEABM>INH</MEABM>
<E1EDL49>
<TRACKN>1Z5600100300083710</TRACKN>
</E1EDL49>
</E1EDL37>
</E1EDL20>
<E1EDL20 SEGMENT="1">
<BTGEW>6.200</BTGEW>
<GEWEI>LB</GEWEI>
<ANZPK>00001</ANZPK>
<E1ADRM1 SEGMENT="1">
<PARTNER_Q>WE</PARTNER_Q>
<PARTNER_ID>0004100350</PARTNER_ID>
<NAME1>INTERNATIONAL CLEANER</NAME1>
<COUNTRY1>US</COUNTRY1>
</E1ADRM1>
<E1ADRM1 SEGMENT="1">
<PARTNER_Q>ZY</PARTNER_Q>
<PARTNER_ID>UPS</PARTNER_ID>
<NAME1>UNITED PARCEL SERVICES</NAME1>
<COUNTRY1>US</COUNTRY1>
</E1ADRM1>
<E1EDL33>
<GRWCU>USD</GRWCU>
</E1EDL33>
<E1EDL47>
<SHIPACCT>560010</SHIPACCT>
<XSISRVC>02</XSISRVC>
<E1EDL48>
<XSIQUALF>BOOK1</XSIQUALF>
<VLABDATA>1234567</VLABDATA>
</E1EDL48>
<E1EDL48>
<XSIQUALF>PAGENR</XSIQUALF>
<VLABDATA>001</VLABDATA>
</E1EDL48>
<E1EDL48>
<XSIQUALF>ZCHARGTYPE</XSIQUALF>
<VLABDATA>PRE</VLABDATA>
</E1EDL48>
</E1EDL47>
<E1EDL37 SEGMENT="1">
<BRGEW>6.200</BRGEW>
<MEABM>INH</MEABM>
<E1EDL49>
<TRACKN>1Z5600100300083700</TRACKN>
</E1EDL49>
</E1EDL37>
</E1EDL20>
</E1EDT20>
</IDOC>
</EDT20>

XML After Transformation

<?xml version="1.0" encoding="UTF-8"?>
<Ship>
<PickupDate>20050708</PickupDate>
<Ship_BP>
<Identifier>*AA</Identifier>
<SenderShipperNumber>560010</SenderShipperNumber>
<ShipperCountry>US</ShipperCountry>
<BookNum>1234567</BookNum>
<PageNum>001</PageNum>
</Ship_BP>
<Ship_Info>
<Identifier>*BA</Identifier>
<ShipmentNumber>1Z5600100300083710</ShipmentNumber>
<PackageCount>00002</PackageCount>
<ShipmentActualWeight>12.400</ShipmentActualWeight>
<UOMWeight>LB</UOMWeight>
<UPSServiceType>03</UPSServiceType>
<ShipmentChgType>PRE</ShipmentChgType>
<UOMDim>INH</UOMDim>
<CurrencyCode>USD</CurrencyCode>
</Ship_Info>
<Ship_Info>
<Identifier>*BA</Identifier>
<ShipmentNumber>1Z5600100300083700</ShipmentNumber>
<PackageCount>00001</PackageCount>
<ShipmentActualWeight>6.200</ShipmentActualWeight>
<UOMWeight>LB</UOMWeight>
<UPSServiceType>02</UPSServiceType>
<ShipmentChgType>PRE</ShipmentChgType>
<UOMDim>INH</UOMDim>
<CurrencyCode>USD</CurrencyCode>
</Ship_Info>
<Address_Info>
<Identifier>*CA</Identifier>
<AddressQualifier>18</AddressQualifier>
<CompanyName>COME CLEAN JANITORIAL</CompanyName>
<Country>US</Country>
</Address_Info>
<Address_Info>
<Identifier>*CA</Identifier>
<AddressQualifier>18</AddressQualifier>
<CompanyName>INTERNATIONAL CLEANER</CompanyName>
<Country>US</Country>
</Address_Info>
<Address_Info>
<Identifier>*CA</Identifier>
<AddressQualifier>06</AddressQualifier>
<CompanyName>UNITED PARCEL SERVICE</CompanyName>
<Country>US</Country>
</Address_Info>
<Pkg_Info>
<Identifier>*PA</Identifier>
<PackageTrackingNumber>1Z5600100300083710</PackageTrackingNumber>
<PackageActualWeight>6.200</PackageActualWeight>
</Pkg_Info>
<Pkg_Info>
<Identifier>*PA</Identifier>
<PackageTrackingNumber>1Z5600100300083700</PackageTrackingNumber>
<PackageActualWeight>6.200</PackageActualWeight>
</Pkg_Info>
</Ship>

Now let me explain the scenario.
Under <Ship> node PickupDate maps to CREDAT.

Under <ShipBP> node,
Identifier is a constant '*AA'.
SenderShipperNumber will have the value of the first occurence of SHIPACCT, which is in the path /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL47/SHIPACCT.
ShipperCountry maps to first value of ZSHPCNTRY, which is in the path /EDT20/IDOC/E1EDT20/Z1EDT20/ZSHPCNTRY.
BookNum has a small logic associated to it. It is first value of VLABDATA picked up from /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL47/E1EDL48/VLABDATA with the check that XSIQUALF = 'BOOK1'.
PageNum also is similar to BookNum, except that the check is XSIQUALF = 'PAGENR'.

Now comes the next node <Ship_Info>. Identifier is a constant '*BA'. This is a bit complex. We see that the <Ship_Info> node comes thrice. The number of times the node is repeated is based on the following check. We should first identify the PARTNER_Q elements with value of 'WE'. PARTNER_Q is in the path, /EDT20/IDOC/E1EDT20/E1EDL20/E1ADRM1/PARTNER_Q. If the PARTNER_Q value is 'WE', then the value of 'AddressQualifier' would be '18',and also we should check for the PARTNER_ID value. If PARTNER_Q is 'WE' and PARTNER_ID value is the same then, we should basically aggregate the values of ANZPK (path is /EDT20/IDOC/E1EDT20/E1EDL20/ANZPK) for PackageCount, BRGEW (path is /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL37/BRGEW) for ShipmentActualWeight.
In the above example, PARTNER_Q = 'WE' occurs 3 times. But out of the 3 times, the first 2 occurence has the same PARTNER_ID of 0004100357, so we club those 2 as a single occurence, and sum up corresponding ANZPK (00001 + 00001 = 00002) and BRGEW (6.200 + 6.200 = 12.400). Hence PackageCount will be '00002' and ShipmentActualWeight will be 12.400 the first time. Next for PARTNER_Q = 'WE' and PARTNER_ID =
0004100350, as it appears once, we just take the corresponding PackageCount and ShipmentActualWeight (00001 & 6.200 respectively). When PARTNER_Q = 'SP' then the AddressQualifier will have a value of '06'. Anyother PARTNER_Q value should not be considered at all. The other values such as UOMWeight (path is /EDT20/IDOC/E1EDT20/E1EDL20/GEWEI), UPSServiceType (path is /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL47/XSISRVC),UOMDIM (path is /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL37/MEABM), CurrencyCode (path is /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL33/GRWCU). For ShipmentChgType (path is /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL47/E1EDL48/VLABDATA) there is a condition check like XSIQUALF = 'ZCHARGTYPE'.

Next comes the final node <Pkg_Info>, here also the identifier is a constant. In this case this node occurs twice. This is based on PackageTrackingNumber i.e TRACKN (path is /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL37/E1EDL49/TRACKN), if TRACKN is repeated ignore the duplicate, and take the corresponding PackageActualWeight i.e BRGEW (path is /EDT20/IDOC/E1EDT20/E1EDL20/E1EDL37/BRGEW).

I have tried my best to put forward the requirement, in case it is not clear please do ask me. Also remember the nodes are dynamic, so the number of nodes can change as per the source XML. I need a solution preferably in XSLT 1.0, if possible.

thanks
Sameer
PS: Ivan had helped me out the previous time, i hope to get some help from the Stylus Studio team or the other fellow members this time as well :)

   
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.