如果假设我的数据库有三行记录,则通过获取我转换为xml数据的数据,如下所示:
这是我的XML:
<NewDataSet>
<Table>
<RECORD_TYPE_CODE>CTD</RECORD_TYPE_CODE>
<MSG_TYPE_CODE>O103N</MSG_TYPE_CODE>
<CTD_SEQ_NUM>000086</CTD_SEQ_NUM>
<CTD_CTD_PKG_ID>2</CTD_CTD_PKG_ID>
</Table>
<Table>
<RECORD_TYPE_CODE>CTO</RECORD_TYPE_CODE>
<MSG_TYPE_CODE>O203N</MSG_TYPE_CODE>
<CTD_SEQ_NUM>000087</CTD_SEQ_NUM>
<CTD_CTD_PKG_ID>2</CTD_CTD_PKG_ID>
</Table>
<Table>
<RECORD_TYPE_CODE>CTH</RECORD_TYPE_CODE>
<MSG_TYPE_CODE>O303N</MSG_TYPE_CODE>
<CTD_SEQ_NUM>000088</CTD_SEQ_NUM>
<CTD_CTD_PKG_ID>2</CTD_CTD_PKG_ID>
</Table>
</NewDataSet>
通过c急剧代码后面使用for循环im发送包ID(CTD_CTD_PKG_ID)和Sequencenum(CTD_SEQ_NUM)通过xslt参数参数,它按顺序顺序传递,如000086,000087,000088,但第一次在aloop我将通过000086 seqnum接下来当我正在通过000087它正在生成000086表中的数据只是为什么它正在发生传递参数值顺序顺利运行
这是我的XSLT:
<xsl:param name="PackageId" />
<xsl:param name="SequenceNum" />
<xsl:template match="/">
<xsl:apply-templates mode="SequenceB" select="(NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId] | NewDataSet/Table[CTD_SEQ_NUM =$SequenceNum])[1]"/>
</xsl:template>
答案 0 :(得分:0)
我猜(如果我的猜测不正确,您需要更好地解释问题),$PackageId
参数的值始终定义为2
。
您正在使用的XPath表达式:
(NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId]
|
NewDataSet/Table[CTD_SEQ_NUM =$SequenceNum]
)
[1]
从以下所选节点的并集中选择第一个节点:
NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId]
和
NewDataSet/Table[CTD_SEQ_NUM =$SequenceNum]
请注意,如果$PackageId
参数的值为2
,那么theis联合的第一个节点始终为/*/Table[1]
。
解决方案是使用:
替换您正在使用的XPath表达式NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][CTD_SEQ_NUM =$SequenceNum]