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) > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Comparing before and afte, Jeff Sese | Thread | [xsl] <Übelkeit/> - ASCIIfied , Michael Ludwig |
Re: [xsl] Comparing before and afte, Jeff Sese | Date | [xsl] FW: Alpha list(label) generar, V.Ramkumar |
Month |