为什么这个Apply模板无法正常工作

时间:2011-10-28 04:45:57

标签: xslt xslt-1.0

如果假设我的数据库有三行记录,则通过获取我转换为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>

1 个答案:

答案 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]