Well, for example I have an XML:
<ProcessPurchaseOrder >
<PurchaseOrderLine>
<DocumentReference type="sendersReference2">
<DocumentID>
<ID>100</ID>
</DocumentID>
</DocumentReference>
<DocumentReference type="sendersReference3">
<DocumentID>
<ID>ru</ID>
</DocumentID>
</DocumentReference>
<Item>
<CustomerItemID>
<ID>00126</ID>
</CustomerItemID>
</Item>
</PurchaseOrderLine>
<PurchaseOrderLine>
<DocumentReference type="sendersReference2">
<DocumentID>
<ID>200</ID>
</DocumentID>
</DocumentReference>
<DocumentReference type="sendersReference3">
<DocumentID>
<ID>ru</ID>
</DocumentID>
</DocumentReference>
<Item>
<CustomerItemID>
<ID>123122</ID>
</CustomerItemID>
</Item>
</PurchaseOrderLine>
</ProcessPurchaseOrder>
and part of XSLT:
<xsl:for-each select="*:PurchaseOrderLine">
<xsl:variable name="ArtNr" select="*:Item/*:CustomerItemID/*:ID"/>
<xsl:variable name="WepNr" select="/*/DbResponse/ResultSet/Row[Cell[@name='ARTNR']=$ArtNr][Cell[@name='WEANR']=$WeaNr]/Cell[@name='WEPNR']"/>
<xsl:copy>
<xsl:if test="$WepNr!=''">
<xsl:for-each select="$WepNr">
<LineNumber><xsl:value-of select="$WepNr/current()"/></LineNumber>
</xsl:for-each>
</xsl:if>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:for-each>
For every $WepNr value I want to copy whole <PurchaseOrderLine> and insert <LineNumber> with current WepNr value.
So, for example: if $WepNr for 1st PurchaseOrderLine returns: 16; 26 result will be:
<ProcessPurchaseOrder >
<PurchaseOrderLine>
<!-- wepnr[1] = 16 -->
<LineNumber>16</LineNumber>
<DocumentReference type="sendersReference2">
<DocumentID>
<ID>100</ID>
</DocumentID>
</DocumentReference>
<DocumentReference type="sendersReference3">
<DocumentID>
<ID>ru</ID>
</DocumentID>
</DocumentReference>
<Item>
<CustomerItemID>
<ID>00126</ID>
</CustomerItemID>
</Item>
</PurchaseOrderLine>
<PurchaseOrderLine>
<!-- copied PurchaseOrderLine with wepnr[2]=26 -->
<LineNumber>26</LineNumber>
<DocumentReference type="sendersReference2">
<DocumentID>
<ID>100</ID>
</DocumentID>
</DocumentReference>
<DocumentReference type="sendersReference3">
<DocumentID>
<ID>ru</ID>
</DocumentID>
</DocumentReference>
<Item>
<CustomerItemID>
<ID>00126</ID>
</CustomerItemID>
</Item>
</PurchaseOrderLine>
<!-- here is 2nd PurchaseOrderLine>
<!-- ... -->
</ProcessPurchaseOrder>
Is it possible?
UPD:
DBresponse XML part
<DbResponse>
<ResultSet>
<Row>
<Cell name="WEANR" type="VARCHAR2">1909123</Cell>
<Cell name="ARTNR" type="VARCHAR2">00126</Cell>
<Cell name="WEPNR" type="VARCHAR2">1</Cell>
</Row>
<Row>
<Cell name="WEANR" type="VARCHAR2">1909123</Cell>
<Cell name="ARTNR" type="VARCHAR2">00126</Cell>
<Cell name="WEPNR" type="VARCHAR2">16</Cell>
</Row>
</ResultSet>
</DbResponse>
It just means that WepNr could return multiple values: like “1 16” in this case
I think instead of
you rather want:
and then at the top level
That assumes that
$WearNris a global param or variable, otherwise you would need to pass that value on e.g.and
All untested of course, you would better supply minimal but complete code sample allowing us to write testable code.