Not reading last record group.
I have a problem that is driving me nuts. I have a fairly flat input file like this:
<Records>
<Record>
<Field1>8150000606</Field1>
<Field2>00010</Field2>
<Field9>20060623</Field9>
</Record>
<Record>
<Field1>8150000606</Field1>
<Field2>00020</Field2>
<Field9>20060623</Field9>
</Record>
<Record>
<Field1>8150000606</Field1>
<Field2>00060</Field2>
<Field3>JP02</Field3>
<Field9>20060624</Field9>
</Record>
<Record>
<Field1>8150000606</Field1>
<Field2>00070</Field2>
<Field9>20060624</Field9>
</Record>
<Record>
<Field1>8150000607</Field1>
<Field2>00010</Field2>
<Field9>20060623</Field9>
</Record>
<Record>
<Field1>8150000607</Field1>
<Field2>00020</Field2>
<Field9>20060624</Field9>
</Record>
</Records>
Field1=PONumber, Field2=LineNumber, Field3=PostingDate
The requirement is to create a new PO whenever the PONumber or Posting Date changes, so that I should have four PO's created.
1 PO for 8150000606/20060623 with lines 00010/00020, 1 PO for 8150000606/20060624 with lines 00060/00070, 1 PO for 8150000607/20060623 with line 00010 and finally 1 po for 8150000607/20060624 with line 00020.
I am checking preceding-sibling::Record/Field1 or preceding-sibling::Record/Field9 to test the level breaks. All works fine, except the last <Record> never gets processed.
I am using xmlSpy debugger to test this, and Xalan when it gets into production.
Am I missing something fundamental?
XSL follows:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="/Records">
<PurchaseOrder>
<xsl:for-each select="Record[not(Field1 = preceding-sibling::Record/Field1) or not(Field9 = preceding-sibling::Record/Field9)]">
<xsl:sort order="ascending" select="Field1"/>
<xsl:sort order="ascending" select="Field9"/>
<PurchaseOrderHeader>
<PurchaseOrderNumber>
<xsl:value-of select="Field1"/>
</PurchaseOrderNumber>
<POCreateDate>
<xsl:value-of select="Field9"/>
</POCreateDate>
<xsl:variable name="Test" select="Field9"/>
<xsl:variable name="Test1" select="Field1"/>
<xsl:for-each select="/Records/Record[Field1 = $Test1 and Field9 = $Test]">
<xsl:call-template name="GetRecords">
</xsl:call-template>
</xsl:for-each>
</PurchaseOrderHeader>
</xsl:for-each>
</PurchaseOrder>
</xsl:template>
<xsl:template name="GetRecords">
<ProductLineItem>
<LineNumber>
<xsl:value-of select="normalize-space(Field2)"/>
</LineNumber>
</ProductLineItem>
</xsl:template>
</xsl:stylesheet>
|