XSLT:使用谓词和<xsl:if>语句之间的区别

时间:2018-07-12 06:33:13

标签: xml xslt xpath predicates

我试图了解使用谓词和使用ncp <- function(df2){ # Root finding: finds 2 `ncp` for a given `df2` b <- sapply(c(alpha[1], alpha[2]), function(x) tryCatch(uniroot(f, c(0, 1e7), alpha = x, q = peta, df1 = df1, df2 = df2)[[1]], error =function(e)NA )) if(any(is.na(b)))b= c(1,10) b / (b + (df2 + 4)) } uniroot(ncp_diff, c(0, 1000)) # $root [1] 336.3956 $f.root [1] -2.132438e-09 $iter [1] 8 $init.it [1] NA $estim.prec [1] 6.103516e-05 之间是否有区别?

从性能的角度来看,谓词的使用会更好吗?谓词是否也遍历xml树中的每个节点以根据过滤条件识别节点?

2 个答案:

答案 0 :(得分:1)

在XPath谓词或xsl:if(或xsl:when)测试中放置条件之间的决定实际上是样式之一,而不是性能。

可以使用循环和if语句在XSLT中编写

过程 代码,但要优雅地利用XSLT的功能,请在XSLT的 基础上声明性 模式匹配和转换功能。

与其进行 先执行此操作,然后再执行),而不是思考如何进行 声明式 通过匹配和转换来表达输入XML和输出XML之间的关系(匹配输入XML并映射到输出XML 。这是xs:template的目的。)。谓词可帮助您以声明方式表达模式匹配,因此在使用XSLT的设计方式时,它比过程性xsl:if语句更可取。

答案 1 :(得分:1)

XSLT和XQuery使用XPath作为表达式语言,谓词是XPath表达式https://www.w3.org/TR/xpath-31/#id-filter-expression的一部分,xsl:if是XSLT语言https://www.w3.org/TR/xslt-30/#xsl-if的指令。

对于您在对Tim的评论中提到的示例,我认为大多数人更喜欢使用谓词进行选择和过滤的紧凑XPath语法方法,除非您需要使用name = 'John'输出节点的位置关于所有选定的节点,例如<xsl:for-each select="person[name = 'John']"><xsl:value-of select="position()"/></xsl:for-each>将输出输出1,2,3...,其中包含person个子元素的name = 'John'个元素的数量,而<xsl:for-each select="person"><xsl:if test="name = 'John'"><xsl:value-of select="position()"/></xsl:if></xsl:for-each>将输出每个person元素的位置在所有name = 'John'元素的序列中包含一个person子元素。

关于性能,我认为您需要检查特定处理器的特定情况,对于声明性语言,处理器可以选择重写或优化任何代码,只要它能产生定义的输出即可。