Xslt xsl:for each select=:两个条件
在xsl中,我们可以在“for each”循环中编写两个条件。例如,而不是Xslt xsl:for each select=:两个条件,xslt,Xslt,在xsl中,我们可以在“for each”循环中编写两个条件。例如,而不是 <xsl:when test="/document/line[ (substring(field[@id='0'], 1,3)='MAR') ] and /document/line[ contains(substring(field[@id='0'],123,4),'001
<xsl:when test="/document/line[
(substring(field[@id='0'], 1,3)='MAR')
] and
/document/line[
contains(substring(field[@id='0'],123,4),'0010')
]">
我们可以这样写:
<xsl:for-each select="/document/line[
contains(substring(field[@id='0'], 1,3),'MAR')
] and
/document/line[
contains(substring(field[@id='0'],123,4),'0010')
]">
致意
根据评论更新
<xsl:for-each select="/document/line[
contains(substring(field[@id='0'], 1,3),'MAR')
and contains(substring(field[@id='0'],123,4),'0010')
]">
如果问题是“是否可以检查a的select属性中的两个条件”,则答案是:否。
因为
表达式的计算结果必须为节点集。
(来自)
因此,select的数据类型必须是节点集,而不是布尔值
但是,如果要在xsl:for each
或xsl:template
(后者更好)等中选择两个节点集,可以使用联合运算符(|):
也许它是正确的?我无法测试它,但我想说你评论中的方法是正确的,而你帖子中的方法则不是。不能在select
中选择两个XPath表达式,而可以在XPath表达式中使用和
运算符。第二个是正确的。谢谢你的回答,我会记住它。@Petras我还为你的需要添加了一个可能的解决方案你写道:“有可能检查两个条件吗[…]答案是:没有。那是错误的。你写道:“表达式必须计算到一个节点集。””“是的。还要注意,节点集联合和从注释中获取的操作意图无关。@Alejandro mhm,可能是。。我参考了问题中的前两个代码片段。如果需要,请编辑我的回复。谢谢我的解决方案是使用联合运算符(管道)。谢谢你的意见!
<xsl:for-each select="/document/line[
contains(substring(field[@id='0'], 1,3),'MAR')
] |
/document/line[
contains(substring(field[@id='0'],123,4),'0010')
]">