たとえば、次のような 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>
および 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>
すべての値について、全体をコピーして現在の値で挿入し$WepNr
たい。<PurchaseOrderLine>
<LineNumber>
WepNr
例:$WepNr
最初の PurchaseOrderLine の場合: 16; 26 結果は次のようになります。
<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>
出来ますか?
UPD : DBresponse XML 部分
<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>
WepNr
が複数の値を返す可能性があることを意味するだけです:1 16
この場合は " " のように