SteveEClarke
SteveEClarke

Reputation: 11

XML for-each not working correctly

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

Answers (1)

michael.hor257k
michael.hor257k

Reputation: 116992

XML is case-sensitive:

<xsl:for-each select="//OrderDetails/StockLine">

does not select Stockline with lower-case l.

Upvotes: 1

Related Questions