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
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Hari KrishnaSubject: Sorting Help Needed
Author: Hari Krishna
Date: 03 Dec 2007 03:29 PM
Originally Posted: 03 Dec 2007 01:41 PM
I am new to stylus and xml as well. I am trying build an XSLT Mapping exclusively for sorting.

I have an IDOC coming in and at one perticular segement i would like to apply sorting based on internal field values.

Input Structure, E1EDL37 will repeat 1:N (Unbounded)

<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005666</EXIDV>
...
</E1EDL37>


<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005669</EXIDV>
...
</E1EDL37>

<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_PALL</VHILM>
...
<E1EDL44 SEGMENT="1"><EXIDV>00000000003000005666</EXIDV></E1EDL44><E1EDL44 SEGMENT="1"><EXIDV>00000000003000005669</EXIDV></E1EDL44>
</E1EDL37>

<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_PALL</VHILM>
...
<E1EDL44 SEGMENT="1"><EXIDV>00000000003000005666</EXIDV></E1EDL44>
<E1EDL44 SEGMENT="1"><EXIDV>00000000003000005669</EXIDV></E1EDL44>
</E1EDL37>


<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005666</EXIDV>
...
</E1EDL37>


<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005669</EXIDV>
...
</E1EDL37>


RFID_PALL always comes at the bottom. Can be more than 1 always. Like 10 RFID_PALL contains 20 or more RFID_CASE information inside.

Now would like to sort RFID_PALL first and follows RFID_CASE Information which belongs to RFID_PALL, again follows next RFID_PALL and RFID_CASE information.

Output xml structure needed

<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_PALL</VHILM>
...
<E1EDL44 SEGMENT="1"><EXIDV>00000000003000005666</EXIDV></E1EDL44>
<E1EDL44 SEGMENT="1"><EXIDV>00000000003000005669</EXIDV></E1EDL44>
</E1EDL37>

<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005666</EXIDV>
...
</E1EDL37>


<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005669</EXIDV>
...
</E1EDL37>

<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_PALL</VHILM>
...
<E1EDL44 SEGMENT="1"><EXIDV>00000000003000005667</EXIDV></E1EDL44>
<E1EDL44 SEGMENT="1"><EXIDV>00000000003000005668</EXIDV></E1EDL44>
</E1EDL37>

<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005667</EXIDV>
...
</E1EDL37>


<E1EDL37 SEGMENT="1">
...
<VHILM>RFID_CASE</VHILM>
<EXIDV>00000000003000005668</EXIDV>
...
</E1EDL37>

Attaching source and results of xml files.


UnknownSourceResultsfromtheMAP.xml
SourFileExample

UnknownResultsfromtheMAP.xml
ResultsfileExample

Postnext
Hari KrishnaSubject: Sorting Help Needed
Author: Hari Krishna
Date: 03 Dec 2007 06:01 PM
I made some progress so far. I am able to display 2 of RFID_PALL with the given source. Made a template and loopoing. But as far as the child value is not able to return.
I am trying to capture the values from E1EDL44/EXIDV as Variable CASE, so that i can use this varaiable value in the second loop to write the continued segments, but no luck.

Any help is appreciated



<xsl:for-each select="//E1EDL20/E1EDL37">
<xsl:choose>
<xsl:when test="VHILM = 'RFID_PALL' ">
<xsl:call-template name="EPCs">
<xsl:with-param name="EPCs">
<xsl:value-of select="//E1EDL20/E1EDL37"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
</xsl:choose>

<xsl:variable name="Case">
<xsl:value-of select="./E1EDL44/EXIDV"/>
</xsl:variable>

<xsl:for-each select="//E1EDL20/E1EDL37">
<xsl:choose>
<xsl:when test="E1EDL37/VHILM = 'RFID_CASE' and 'E1EDL44/EX1DV' = 'String($Case)' ">
<xsl:call-template name="EPCs">
<xsl:with-param name="EPCs">
<xsl:value-of select="//E1EDL20/E1EDL37"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:for-each>

</xsl:for-each>

Posttop
Hari KrishnaSubject: Sorting Help Needed
Author: Hari Krishna
Date: 04 Dec 2007 11:39 AM
Finally i made it. Here is the code.

<xsl:for-each select="E1EDL37[VHILM='RFID_PALL']">
<xsl:copy-of select="." />
<xsl:for-each select="E1EDL44">
<xsl:variable name="Case">
<xsl:value-of select="EXIDV" />
</xsl:variable>
<xsl:copy-of select="../../E1EDL37[EXIDV=$Case]" />
</xsl:for-each>
</xsl:for-each>

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
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.