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)
-> + Use of before and after string (3) Sticky Topic
-> - How do I substitute element ty... (1)
-> + How does one add working days ... (4)
-> - Help, I have existing XLT and... (1)
-> + Need help on XSLT issue - (2)
-> + EDI to XML Conversion (7)
-> - XML To JSON Conversion using X... (1)
-> + Formatting Paragraphs to same ... (2)
-> - Grouping of records (1)
-> + Problems with xsd 1.1 (4)
-> + XML to HL7 mapping (3)
-> + XSLT 3 and Iterate (2)
-> + XSL-FO to PDF preview (3)
-> + java.lang.RuntimeException: Er... (2)
-> + Create Acroforms with Stylus X... (2)
-> + How to change XSLT parameter s... (3)
-> + how to change format of the da... (2)
-> + Search "Next 8 Results " doesn... (2)
-> - Support for Git (1)
-> + newbee (8)
-- [1-20] [21-40] [41-60] Next
+ XQuery Help and Discussion (2017)
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
Topic  
Postnext
Samz SammySubject: How do I do something similar to an Outer Join using XSLT 1.0
Author: Samz Sammy
Date: 23 Jul 2007 10:22 AM
Originally Posted: 23 Jul 2007 10:20 AM
Hi friends

I have a requirement wherein I have to merge 2 nodes, lets say <ABC> and <XYZ>. Both have common elements/fields called AMOUNT, DATE, INVOICEID and CUSTOMERID.
My where clause would be something like this,

ABC."DATE"=XYZ."DATE" and
ABC.CUSTOMERID=XYZ.CUSTOMERID and
ABC.INVOICEID=XYZ.INVOICEID

But it should be like an outer join on XYZ, i.e if there is no value in the ABC then the value from XYZ should be picked, else the normal where condition should take place.

The final merged XML will have values from XYZ.

thanks and regards
Sammy

Postnext
James DurningSubject: How do I do something similar to an Outer Join using XSLT 1.0
Author: James Durning
Date: 23 Jul 2007 11:53 AM
Left outer join?
<xsl:for-each select="ABC">
<xsl:for-each select="XYZ[DATE=current()/DATE][CUSTOMERID=current()/CUSTOMERID][INVOICEID=current()/INVOICEID]">
output ABC Values,
output XYZ Values.
</xsl:for-each>
<xsl:if test="not(XYZ[DATE=current()/DATE][CUSTOMERID=current()/CUSTOMERID][INVOICEID=current()/INVOICEID])">
output ABC Values,
output null for XYZ values.
</xsl:if>
</xsl:for-each>

FULL OUTER JOIN? Copy above and:
<xsl:for-each select="XYZ[not (ABC[DATE=current()/DATE][CUSTOMERID=current()/CUSTOMERID][INVOICEID=current()/INVOICEID])]">
output null for ABC values,
output XYZ Values
</xsl:for-each>

Posttop
Samz SammySubject: How do I do something similar to an Outer Join using XSLT 1.0
Author: Samz Sammy
Date: 24 Jul 2007 11:01 AM
Originally Posted: 24 Jul 2007 10:34 AM
Thanks James

But ABC and XYZ nodes can occur multiple times. So how do we handle it in that scenario.

I am attaching the input xml.
In this input, I have to merge the MakeRows and ZZBCM_RULE node, the common element to do a left outer join on MakeRows is LINETYPE, and my WHERE clause would be something like,

(MakeRows.LINETYPE = ZZBCM_RULE.LINE_TYPE AND MakeRows.AMOUNT != '0.00') OR (MakeRows.AMOUNT_TALLIED != '0.00' AND MakeRows.AMOUNT = '0.00')

In the output I need the following fields,

LINETYPE --> MakeRows.LINETYPE
AMOUNT --> MakeRows.AMOUNT
ZFREE5 --> ZZBCM_RULE.ZFREE5
ZCOSCT --> ZZBCM_RULE.ZCOSTCT

Sorry about the size of the input.

regards
Sammy


DocumentInput(8).xml
Input File for the requirement

   
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.