2011-10-28 17 views
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后面的尖锐代码im通过xslt参数参数传递包id(CTD_CTD_PKG_ID)和Sequencenum(CTD_SEQ_NUM)它正在按顺序传递,如000086,000087,000088,但第一次在回声中我将通过000086 seqnum它是当im传递000087时,它正好在000086的表中生成数据,为什么它正在发生passin -g参数值按顺序

这里布莱恩好是我的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

我想(如果我的猜测是不正确,你需要更好地解释这个问题),你$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,那么该工会的第一个节点总是/*/Table[1]

解决的办法是用更换正在使用的XPath表达式:

NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][CTD_SEQ_NUM =$SequenceNum] 
+0

谢谢你,这是以前总是从包ID 00086现在的第一个表的内容获取的数据是否正确地变化,我有我已经清楚地知道如何通过基于更多的条件来获取数据。 – pravz

+0

@pravz:不客气。 –

+0

@ dimitre Novatchev:你能否介绍一下为什么以及何时使用positon = 1因为我对此非常困惑 – pravz

相关问题