使用应用模板时如何在xslt中的选择条件中使用两个条件
为什么我不能在上面的选择条件中使用两个条件,任何一个都可以建议我吗。如果失败并出现错误,请告诉我们错误。如果它没有选择您想要的内容,那么(a)向我们显示您的源文档,以及(b)告诉我们您想要选择的内容使用应用模板时如何在xslt中的选择条件中使用两个条件,xslt,xpath,Xslt,Xpath,为什么我不能在上面的选择条件中使用两个条件,任何一个都可以建议我吗。如果失败并出现错误,请告诉我们错误。如果它没有选择您想要的内容,那么(a)向我们显示您的源文档,以及(b)告诉我们您想要选择的内容 (你知道,你的问题提供的信息太少,你不会给人留下你真的想要答案的印象。)你可以使用两个条件,你的表达式看起来完全正确。如果失败并出现错误,请告诉我们错误。如果它没有选择您想要的内容,那么(a)向我们显示您的源文档,以及(b)告诉我们您想要选择的内容 (你知道,你的问题提供的信息太少,你不会给人留下你
(你知道,你的问题提供的信息太少,你不会给人留下你真的想要答案的印象。)你可以使用两个条件,你的表达式看起来完全正确。如果失败并出现错误,请告诉我们错误。如果它没有选择您想要的内容,那么(a)向我们显示您的源文档,以及(b)告诉我们您想要选择的内容 (你知道,你的问题提供的信息太少,你不会给人留下你真的想要答案的印象。) 与上面的第一个表达式完全不等价 第一个表达式选择
新数据集的第一个表
子项
,使其CTD_CTD_PKG_ID
子项的字符串值等于$PackageId
的字符串值。在这种情况下,我们不知道将选择NewDataSet
的哪个子级(在哪个位置)——将选择恰好是第一个具有指定属性的子级
另一方面,只有当其CTD\u CTD\u PKG\u ID
子级的字符串值等于$PackageId
的字符串值时,后一个表达式才会选择新数据集的第一个表
子级。在这种情况下,如果选择了任何内容,它将是第一个表
子项
如果需要与第一个表达式等价的表达式,且该表达式只有一个谓词,则此类表达式之一是:
NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId and position() = 1]
更新:OP发布了一段代码片段:
我的第二个猜测是,您希望模板仅应用于两个节点中的第一个节点。如果是这样,则使用:
<xsl:apply-templates mode="block2sequence" select=
"NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][position()=1]
and
NewDataSet/Table[CTD_SEQ_NUM =$strXSLMsgType][position()=1]"/>
<xsl:apply-templates mode="block2sequence" select=
"NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][1]
|
NewDataSet/Table[CTD_SEQ_NUM =$strXSLMsgType][1]"/>
注释:
<xsl:apply-templates mode="block2"
select="NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][position()=1] "/>
请学习如何在问题中提问——提供所有相关数据并解释——而不是在随后的评论中
您是否知道[1]
相当于[position()=1]
,并且更短
与上面的第一个表达式完全不等价
第一个表达式选择新数据集的第一个表
子项
,使其CTD_CTD_PKG_ID
子项的字符串值等于$PackageId
的字符串值。在这种情况下,我们不知道将选择NewDataSet
的哪个子级(在哪个位置)——将选择恰好是第一个具有指定属性的子级
另一方面,只有当其CTD\u CTD\u PKG\u ID
子级的字符串值等于$PackageId
的字符串值时,后一个表达式才会选择新数据集的第一个表
子级。在这种情况下,如果选择了任何内容,它将是第一个表
子项
如果需要与第一个表达式等价的表达式,且该表达式只有一个谓词,则此类表达式之一是:
NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId and position() = 1]
更新:OP发布了一段代码片段:
我的第二个猜测是,您希望模板仅应用于两个节点中的第一个节点。如果是这样,则使用:
<xsl:apply-templates mode="block2sequence" select=
"NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][position()=1]
and
NewDataSet/Table[CTD_SEQ_NUM =$strXSLMsgType][position()=1]"/>
<xsl:apply-templates mode="block2sequence" select=
"NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][1]
|
NewDataSet/Table[CTD_SEQ_NUM =$strXSLMsgType][1]"/>
注释:
<xsl:apply-templates mode="block2"
select="NewDataSet/Table[CTD_CTD_PKG_ID =$PackageId][position()=1] "/>
请学习如何在问题中提问——提供所有相关数据并解释——而不是在随后的评论中
您是否知道[1]
相当于[position()=1]
,并且更短
这还不清楚:您想要实现什么,您想要选择什么,这是您无法指定的两个条件(在上面的select
属性中,您实际上指定了两个条件)。因为这样我们在match=“X和y”中使用的是类似的,当我在这里做的时候,它是这样说的wrong@_pravz:最好编辑你的问题并描述好问题所在。你的评论仍然让人困惑。@DimitreNovatchev是的,我已经编辑了模板,它抛出了错误,你能帮我吗suggest@DimitreNovatchev我在select中有两个使用条件,因为在所有新数据集/表PackageId中都有$PackageId和$PackSEQ,它们将是相同的,而PackSEQ将有所不同,因此通过使用两个条件,我的问题将得到解决当我试图更新APPLY TEMPLATE SELECT中的两个条件时,出现了一个错误,但我不清楚:您想要实现什么,您想要选择什么,这两个条件是您无法指定的(在上面的SELECT
属性中,您实际指定了两个条件)。因为这样我们在match=“X和y”中使用的是类似的,当我在这里做的时候,它是这样说的wrong@_pravz:最好编辑你的问题并描述好问题所在。你的评论仍然让人困惑。@DimitreNovatchev是的,我已经编辑了模板,它抛出了错误,你能帮我吗suggest@DimitreNovatchev我在select中有两个使用条件,因为在所有新数据集/表PackageId中都有$PackageId和$PackSEQ,它们将是相同的,而PackSEQ将有所不同,因此通过使用两个条件,我的问题将得到解决当我试图更新APPLY TEMPLATE SELECT中的两个条件时,出现了一个错误,请建议meExpression必须计算到一个节点集。-->NewDataSet/Table…][position()=1]表达式必须计算为节点集。-->NewDataSet/表…][position()=1]