Sorry Typo,, you can remove the empty LineItem template.
Cheers,
Spencer
On Dec 11, 2007 11:23 AM, Spencer Tickner <spencertickner(_at_)gmail(_dot_)com>
wrote:
Hi Tim,
For someone that's been there <xsl:for-each> statements are rarely the
way to go. The following stylesheet should solve your problem. I left
it verbose as it may help you follow some of the logic. Also you
didn't have any attributes in your example but I handled them just in
case:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="WorkData">
<xsl:copy>
<xsl:copy-of select="@*"/>
<Orders>
<xsl:apply-templates/>
</Orders>
</xsl:copy>
</xsl:template>
<xsl:template match="Detail"/>
<xsl:template match="Headers"><xsl:apply-templates/></xsl:template>
<xsl:template match="Header">
<xsl:variable name="currPO" select="PO_NBR"/>
<Order>
<hdr>
<xsl:apply-templates/>
</hdr>
<xsl:if test="/WorkData/Detail/LineItem[PO_NBR = PO_NBR]">
<LineItems>
<xsl:apply-templates
select="/WorkData/Detail/LineItem[PO_NBR = $currPO]"/>
</LineItems>
</xsl:if>
</Order>
</xsl:template>
<xsl:template match="LineItem">
</xsl:template>
<xsl:template match="Header/PO_NBR">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="Header/PROC_IND">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="LineItem">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="LineItem/PO_NBR">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="LineItem/LINE_ITEM_NBR">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="LineItem/BG_ID">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<!-- expected Merged hierarchy output-->
</xsl:stylesheet>
Hope that's what you wanted.
Cheers,
Spencer
On Dec 11, 2007 9:49 AM, Tim <timlhunt(_at_)mindspring(_dot_)com> wrote:
Hi. I have a newbie question. I have been able to extract data from two
tables, into a work area like below. The data is below with a stlesheet
to try to merge them, but I get all the detail.
<?xml version="1.0" encoding="UTF-8"?>
<WorkData>
<Headers>
<Header>
<PO_NBR>138513</PO_NBR>
<PROC_IND>N</PROC_IND>
</Header>
<Header>
<PO_NBR>138522</PO_NBR>
<PROC_IND>N</PROC_IND>
</Header>
</Headers>
<Detail>
<LineItem>
<PO_NBR>138513</PO_NBR>
<LINE_ITEM_NBR>1</LINE_ITEM_NBR>
<BG_ID>VL 81268</BG_ID>
</LineItem>
<LineItem>
<PO_NBR>138513</PO_NBR>
<LINE_ITEM_NBR>2</LINE_ITEM_NBR>
<BG_ID>VL 81200</BG_ID>
</LineItem>
<LineItem>
<PO_NBR>138522</PO_NBR>
<LINE_ITEM_NBR>1</LINE_ITEM_NBR>
<BG_ID>VL 81265</BG_ID>
</LineItem>
</Detail>
</WorkData>
<!-- expected Merged hierarchy output-->
<WorkData>
<Orders>
<Order>
<hdr>
<PO_NBR>138513</PO_NBR>
<PROC_IND>N</PROC_IND>
</hdr>
<LineItems>
<LineItem>
<PO_NBR>138513</PO_NBR>
<LINE_ITEM_NBR>1</LINE_ITEM_NBR>
<BG_ID>VL 81268</BG_ID>
</LineItem>
<LineItem>
<PO_NBR>138513</PO_NBR>
<LINE_ITEM_NBR>2</LINE_ITEM_NBR>
<BG_ID>VL 81200</BG_ID>
</LineItem>
</LineItems>
</Order>
<Order>
<hdr>
<PO_NBR>138522</PO_NBR>
<PROC_IND>N</PROC_IND>
</hdr>
<LineItems>
<LineItem>
<PO_NBR>138522</PO_NBR>
<LINE_ITEM_NBR>1</LINE_ITEM_NBR>
<BG_ID>VL 81265</BG_ID>
</LineItem>
</LineItems>
</Order>
</Orders>
</WorkData>
<!-- My XSL so far gets all the detail, rather than associating detail
with the correct header portion: -->
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/WorkData/Headers/Header">
<xsl:for-each select="/WorkData/Headers/Header">
<xsl:value-of select="."/>
<xsl:for-each select="/WorkData/Detail/LineItem/*">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:text>-+-
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--