Reputation: 11
Being only a beginner at XML programming, I have stumbled into a slight problem trying to get the for-each to work. I have other code that is similar, which works correctly, so borrowed some code from there and changed a few lines ( sounds simple ) - however, when I try and execute the code I am only get the first child node appear, the for-each does not seem to pass to the second child.
Thanks
Input XML:
<?xml version="1.0" encoding="Windows-1252"?>
<SalesOrders>
<Order>
<OrderHeader>
<Customer>000008</Customer>
<SalesOrder>000809</SalesOrder>
</OrderHeader>
<OrderDetails>
<StockLine>
<SalesOrderLine>0001</SalesOrderLine>
<StockCode>LOT100</StockCode>
<Warehouse>FG</Warehouse>
<Quantity>3.000</Quantity>
<Lot>500</Lot>
</StockLine>
<Stockline>
<SalesOrderLine>0002</SalesOrderLine>
<StockCode>LOT101</StockCode>
<Warehouse>FG</Warehouse>
<Quantity>4.000</Quantity>
<Lot>501</Lot>
</Stockline>
</OrderDetails>
</Order>
</SalesOrders>
XSL Translation;
<?xml version="1.0" encoding="windows-1252"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/">
<PostSorBackOrderRelease>
<xsl:for-each select="//OrderDetails/StockLine">
<Item>
<Customer>
<xsl:value-of select="../../OrderHeader/Customer" />
</Customer>
<SalesOrder>
<xsl:value-of select="../../OrderHeader/SalesOrder" />
</SalesOrder>
<StockCode>
<xsl:value-of select="StockCode" />
</StockCode>
<Warehouse>
<xsl:value-of select="Warehouse" />
</Warehouse>
<Quantity>
<xsl:value-of select="Quantity" />
</Quantity>
<ActualShipQty>
</ActualShipQty>
<UnitOfMeasure />
<Units />
<Pieces />
<ReleaseFromMultipleLines>N</ReleaseFromMultipleLines>
<SalesOrderLine>
<xsl:value-of select="SalesOrderLine" />
</SalesOrderLine>
<CompleteLine>N</CompleteLine>
<AdjustOrderQuantity>N</AdjustOrderQuantity>
<OrderStatus>3</OrderStatus>
<ReleaseFromShip>N</ReleaseFromShip>
<ZeroShipQuantity>N</ZeroShipQuantity>
<AllocateSerialNumbers>N</AllocateSerialNumbers>
<eSignature>
</eSignature>
</Item>
</xsl:for-each>
</PostSorBackOrderRelease>
</xsl:template>
</xsl:stylesheet>
gets just the first line node of;
<PostSorBackOrderRelease>
<Item>
<Customer>000008</Customer>
<SalesOrder>000809</SalesOrder>
<StockCode>LOT100</StockCode>
<Warehouse>FG</Warehouse>
<Quantity>3.000</Quantity>
<ActualShipQty />
<UnitOfMeasure />
<Units />
<Pieces />
<ReleaseFromMultipleLines>N</ReleaseFromMultipleLines>
<SalesOrderLine>0001</SalesOrderLine>
<CompleteLine>N</CompleteLine>
<AdjustOrderQuantity>N</AdjustOrderQuantity>
<OrderStatus>3</OrderStatus>
<ReleaseFromShip>N</ReleaseFromShip>
<ZeroShipQuantity>N</ZeroShipQuantity>
<AllocateSerialNumbers>N</AllocateSerialNumbers>
<eSignature />
</Item>
</PostSorBackOrderRelease>
Upvotes: 1
Views: 61
Reputation: 116992
XML is case-sensitive:
<xsl:for-each select="//OrderDetails/StockLine">
does not select Stockline
with lower-case l
.
Upvotes: 1