[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Comparing before and after records [SEC=UNCLAS

Subject: Re: Comparing before and after records [SEC=UNCLASSIFIED]
From: Enrico.Raymund@xxxxxxxxxxx
Date: Tue, 8 Jul 2008 13:37:50 +1000
Re:  Comparing before and after records     [SEC=UNCLAS
Hi Jeff,

Thanks, worked beautifully!

best regards,

Enrico Raymundo



                                                                           
             Jeff Sese                                                     
             <jeferson.sese@as                                             
             iatype.com>                                                To 
                                            xsl-list@xxxxxxxxxxxxxxxxxxxxx 
             08/07/2008 01:26               m                              
             PM                                                         cc 
                                                                           
                                                                   Subject 
             Please respond to              Re:  Comparing before and 
             xsl-list@xxxxxxxx              after records                  
              lberrytech.com                [SEC=UNCLASSIFIED]             
                                                           Protective Mark 
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           



Please try this stylesheet, just wrap a xsl:result-document
instruction to the template for After to create separate XML files:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/
Transform">
             <xsl:key name="Before_Events" match="Before" use="Event_Id"/>
             <xsl:template match="/">
                         <xsl:apply-templates select="Events/After"/>
             </xsl:template>
             <xsl:template match="/Events/After">
                         <Event>
                                     <xsl:choose>
                                                 <xsl:when
test="key('Before_Events', Event_Id)">

<Operation>MODIFY</Operation>
                                                             <xsl:comment
select="if (key('Before_Events', Event_Id)/
Event_Field != Event_Field) then 'Changed' else 'Unchanged'"></
xsl:comment>
                                                 </xsl:when>
                                                 <xsl:otherwise>

<Operation>CREATE</Operation>
                                                 </xsl:otherwise>
                                     </xsl:choose>
                                     <xsl:copy-of select="Event_Field"/>
                         </Event>
             </xsl:template>
</xsl:stylesheet>

Hope this helps,
-- Jeff

On 07 8, 08, at 7:15 AM, Enrico.Raymund@xxxxxxxxxxx wrote:

> Hi Greg,
>
> Thanks.  Yeah, that's a typo there, but it definitely will not work
> as it
> needs to include the Event_Id of current context (After) and
> corresponding
> Before/Event_Id.
>
> regards,
>
> Enrico Raymundo
>
>
>
>
>              "Greg Fausak"
>              <lgfausak@xxxxxxx
>
> om>                                                        To
>                                             xsl-
> list@xxxxxxxxxxxxxxxxxxxxx
>              08/07/2008 12:57               m
>
> AM                                                         cc
>
>
> Subject
>              Please respond to              Re:  Comparing
> before and
>              xsl-list@xxxxxxxx              after records
>               lberrytech.com                [SEC=UNCLASSIFIED]
>
> Protective Mark
>
>
>
>
>
>
>
>
>
>
> Hi,
>
> I'm kinda new to the list and to xslt.  But, trying to understand
> what you're doing here.
>
> First, you reference:
> ---
>                    <xsl:when test="//Before/Even_Field/text() =
> Event_Field/text()">
>                        <xsl:comment>unchanged</xsl:comment>
>                    </xsl:when>
> ---
>
> Probably just an example error, but, Event_Field instead of
> Even_Field.
>
> -g
>
>
> On Mon, Jul 7, 2008 at 1:33 AM,  <Enrico.Raymund@xxxxxxxxxxx> wrote:
>> Hi Abel,
>>
>> I was not able to come back to you sooner but here it is:
>>
>> XML Input:
>> <?xml version="1.0" encoding="UTF-8"?>
>> <Events>
>>    <Before>
>>        <Event_Type>A</Event_Type>
>>        <Event_Field>1111</Event_Field>
>>        <Event_Id>1001</Event_Id>
>>    </Before>
>>    <Before>
>>        <Event_Type>B</Event_Type>
>>        <Event_Field>2222</Event_Field>
>>        <Event_Id>1002</Event_Id>
>>    </Before>
>>    <After>
>>        <Event_Type>A</Event_Type>
>>        <Event_Field>1111</Event_Field>
>>        <Event_Id>1001</Event_Id>
>>    </After>
>>    <After>
>>        <Event_Type>B</Event_Type>
>>        <Event_Field>2233</Event_Field>
>>        <Event_Id>1002</Event_Id>
>>    </After>
>>    <After>
>>        <Event_Type>C</Event_Type>
>>        <Event_Field>1122</Event_Field>
>>        <Event_Id>1003</Event_Id>
>>    </After>
>> </Events>
>>
>> The XSL file:
>> <?xml version="1.0" encoding="UTF-8"?>
>> <xsl:stylesheet version="2.0"
>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>>    <xsl:output encoding="UTF-8" indent="yes" method="xml"
>> version="1.0"/>
>>    <xsl:strip-space elements="*"/>
>>    <xsl:key match="/Events/Before" name="BEFORE_ID" use="Event_Id"/>
>>    <!-- Root Template -->
>>    <xsl:template match="/">
>>        <xsl:choose>
>>            <xsl:when test="count(//After) &gt; 0">
>>                <xsl:for-each select="//After">
>>                    <xsl:choose>
>>                        <xsl:when test="key('BEFORE_ID', Event_Id)">
>>                            <xsl:call-template
>> name="INSTANTIATE_MODIFY_EVENT">
>>                                <xsl:with-param name="EVENT_TYPE"
>> select="Event_Type"/>
>>                                <xsl:with-param name="AFTER_EVENT_ID"
>> select="Event_Id"/>
>>                            </xsl:call-template>
>>                        </xsl:when>
>>                        <xsl:otherwise>
>>                            <xsl:call-template
>> name="INSTANTIATE_CREATE_EVENT">
>>                                <xsl:with-param name="EVENT_TYPE"
>> select="Event_Type"/>
>>                                <xsl:with-param name="AFTER_EVENT_ID"
>> select="Event_Id"/>
>>                            </xsl:call-template>
>>                        </xsl:otherwise>
>>                    </xsl:choose>
>>                </xsl:for-each>
>>            </xsl:when>
>>            <xsl:otherwise>
>>                <!-- No occurence of 'After':  there is nothing to  
>>
output
>>
> -->
>>            </xsl:otherwise>
>>        </xsl:choose>
>>    </xsl:template>
>>    <!-- 
>>
=============================================================-->
>>    <!-- NAMED  
>> TEMPLATES
-->
>>    <!-- 
>>
=============================================================-->
>>    <xsl:template name="INSTANTIATE_MODIFY_EVENT">
>>        <!-- MODIFY -->
>>        <xsl:param name="EVENT_TYPE"/>
>>        <xsl:param name="AFTER_EVENT_ID"/>
>>        <xsl:result-document encoding="utf-8"
>> href="{$EVENT_TYPE}_{$AFTER_EVENT_ID}.xml"
>>            indent="yes" method="xml">
>>            <Event>
>>                <Operation>MODIFY</Operation>
>>                <xsl:choose>
>>
>>                    <!-- ### THIS IS WHERE I NEED HELP ###-->
>>                    <!-- NEED TO TAKE INTO CONSIDERATION the  
>> Event_Id
of
>>
> the current (After) context -->
>>                    <!-- CAN THIS BE DONE WITHOUT USING key() and
>>
>
generate-id()? -->
>>                    <xsl:when test="//Before/Even_Field/text() =
>> Event_Field/text()">
>>                        <xsl:comment>unchanged</xsl:comment>
>>                    </xsl:when>
>>                    <!-- ### THIS IS WHERE I NEED HELP ###-->
>>
>>                    <xsl:otherwise>
>>                        <xsl:comment>changed</xsl:comment>
>>                    </xsl:otherwise>
>>                </xsl:choose>
>>                <Field>
>>                    <xsl:value-of select="Event_Field"/>
>>                </Field>
>>            </Event>
>>        </xsl:result-document>
>>        <!-- CREATE -->
>>    </xsl:template>
>>
>>    <xsl:template name="INSTANTIATE_CREATE_EVENT">
>>        <xsl:param name="EVENT_TYPE"/>
>>        <xsl:param name="AFTER_EVENT_ID"/>
>>        <xsl:result-document encoding="utf-8"
>> href="{$EVENT_TYPE}_{$AFTER_EVENT_ID}.xml"
>>            indent="yes" method="xml">
>>            <Event>
>>                <Operation>CREATE</Operation>
>>                <Field>
>>                    <xsl:value-of select="Event_Field"/>
>>                </Field>
>>            </Event>
>>        </xsl:result-document>
>>    </xsl:template>
>> </xsl:stylesheet>
>>
>>  The requirements are as follows:
>>
>> (1) Create a separate XML file for each "After" instance.
>> (2) If an "After" instance has no corresponding "Before" instance,
> related
>> by EventId, then this a create operation, ie,
> <Operation>CREATE</Operation>
>> (3) If an  "After" instance has a corresponding "Before" instance,
> related
>> by EventId, then this a modify operation, ie,
> <Operation>MODIFY</Operation>
>>      (3.1) If the value of the Before/Event_Field != to
> After/Event_Field,
>> put a comment:  "<!--changed-->"
>>      (3.2) If the value of the Before/Event_Field = to After/
>> Event_Field,
>> put a comment:  "<!--unchanged-->"
>>
>> The code between "<!-- ### THIS IS WHERE I NEED HELP ###-->" is
>> where I
>> need a proper XPath put in.  With the input XML, the XSLT creates
>> 3 XML
>> files -- which it does,  the XSLT created the following files:
>>
>> A_1001.xml  [the comment is wrong (as the XPath is wrong):
>> Before/EventField = 1111; After/EventField = 1111 (unchanged)]
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <Event>
>>    <Operation>MODIFY</Operation>
>>    <!--changed-->
>>    <Field>1111</Field>
>> </Event>
>>
>>
>> B_1002.xml [the comment field is correct:   Before/EventField = 2222;
>> After/EventField = 2233 (changed)]
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <Event>
>>    <Operation>MODIFY</Operation>
>>    <!--changed-->
>>    <Field>2233</Field>
>> </Event>
>>
>> C_1003.xml [This is correct because there is no <Before> for
>> EventId="1003"]
>>
>> <?xml version="1.0" encoding="utf-8"?>
>> <Event>
>>    <Operation>CREATE</Operation>
>>    <Field>1122</Field>
>> </Event>
>>
>> Thanks in advance.
>>
>> Enrico
>>
>>
>>
>>
>>
>>             Abel Braaksma
>>             <abel.online@xs4a
>>
>> ll.nl>                                                     To
>>                                            xsl-
>> list@xxxxxxxxxxxxxxxxxxxxx
>>             03/07/2008 05:22               m
>>
>> PM                                                         cc
>>
>>
>> Subject
>>             Please respond to              Re:  Comparing
>> before
>>             xsl-list@xxxxxxxx              and after records
>>              lberrytech.com                [SEC=UNCLASSIFIED]
>>
>> Protective Mark
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> Enrico.Raymund@xxxxxxxxxxx wrote:
>>>
>>> The creation of the multiple output document and the
>>> transformations are
>>> easy.  The help I need is in comparing the <Before> and <After>
>>> contents
>>> with the same <EventId>.
>>
>> Your example input and output looks excellent and clearly
>> indented, but
>> please also show us your current xslt file, so we can help you with
>> where you went wrong (and explain what you tried so we can understand
>> where you're coming from). Now it's just a guessing game... (see the
>> list guidelines for more help).
>>
>>
>>
>>
>>
>> --------------------------------------------------------------------
>> Important Notice: If you have received this email by mistake, please
> advise the sender and delete the message and attachments
> immediately.  This
> email, including attachments, may contain confidential, sensitive,
> legally
> privileged and/or copyright information.  Any review, retransmission,
> dissemination or other use of this information by persons or
> entities other
> than the intended recipient is prohibited.  DIAC respects your
> privacy and
> has obligations under the Privacy Act 1988.  The official departmental
> privacy policy can be viewed on the department's website at
> www.immi.gov.au. See: http://www.immi.gov.au/functional/privacy.htm
>>
>> ---------------------------------------------------------------------
>>
>>
>
>
>
> --
> Greg Fausak
> greg@xxxxxxxxxxxx

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.