Re: [xsl] Comparing before and after records [SEC=UNCLASSIFIED]

Subject: Re: [xsl] Comparing before and after records [SEC=UNCLASSIFIED]
From: Enrico.Raymund@xxxxxxxxxxx
Date: Tue, 8 Jul 2008 13:37:50 +1000
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: [xsl] 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: [xsl] 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: [xsl] 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