Xslt 此应用模板无法正常工作的原因
如果假设我的数据库有三行记录,通过获取这些数据,我将转换为xml数据,如下所示: 以下是我的XML:Xslt 此应用模板无法正常工作的原因,xslt,xslt-1.0,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_PK
<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>
CTD
O103N
000086
2.
首席技术官
O203N
000087
2.
CTH
O303N
000088
2.
通过c sharp代码隐藏,使用for循环发送包id(CTD_CTD_PKG_id)和Sequencenum(CTD_SEQ_NUM)通过xslt参数,它是按顺序正确传递的,如00008600087000088,但在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>
我猜(如果我的猜测不正确,您需要更好地解释问题),您的$PackageId
参数的值始终定义为2
您正在使用的XPath表达式:
(NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId]
|
NewDataSet/Table[CTD_SEQ_NUM =$SequenceNum]
)
[1]
从以下选定节点的并集中选择第一个节点:
NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId]
以及:
请注意,如果$PackageId
参数的值为2
,则其并集的第一个节点始终为/*/Table[1]
解决方案是用替换您正在使用的XPath表达式:
NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][CTD_SEQ_NUM =$SequenceNum]
谢谢,以前它总是从第一个表中获取数据,包id 00086现在它正在正确更改,我已经了解了如何通过在select CLEARY中基于多个条件来获取数据。@dimitre Novatchev:您能简要说明为什么以及何时必须使用position=1,因为我对此感到非常困惑please@pravz:
[1]
是[position()=1]
的缩写。更一般地说,[some integer type expression]
是[position()=some integer type expression]
的缩写。必须使用较长形式的情况是,XSLT处理器不可能知道谓词中表达式的类型是整数(但可以保证这一点)。例如:books[$bookNumber]
这里只有您知道$bookNumber
必须是一个整数,但通常它可以有任何值,例如'Hello world'
。在所有这些情况下,XSLT处理器都会计算expr的布尔值。
NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][CTD_SEQ_NUM =$SequenceNum]