почему этот шаблон Apply не работал должным образом - PullRequest
0 голосов
/ 28 октября 2011

если предположить, что в моей базе данных есть три записи строк, извлекая эти данные, которые я преобразовываю в данные 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 точный код позадииспользуя для цикла im отправка идентификатора пакета (CTD_CTD_PKG_ID) и Sequencenum (CTD_SEQ_NUM) через параметры аргумента xslt, он правильно проходил в последовательном порядке, таком как 000086,000087,000088, но в первый раз, когда в цикле я передаю 000086, он выбирался следующим образомкогда я передал 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 голосов
/ 28 октября 2011

Полагаю (если мое предположение неверно, вам нужно лучше объяснить проблему), что значение вашего $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]
...