Xml 编写有效的XSLT
编写有效XSLT的原则和模式是什么? 当我说“有效”时,我的意思是它是有效的Xml 编写有效的XSLT,xml,xslt,Xml,Xslt,编写有效XSLT的原则和模式是什么? 当我说“有效”时,我的意思是它是有效的 结构良好,可读性强 简洁 高效(即具有良好的性能) 简而言之,我正在寻找XSLT的最佳实践 我已经看到了,但是如果您不理解高效代码的作用,那么它就失去了价值 最佳实践1:尽可能使用模板而不是(这是99%的情况) (我是否可以在最佳实践中添加可维护性作为额外的组成部分,哪怕是最重要的部分) 要理解xsl,您确实需要一些实践。 当然,不理解某事物在做什么是相对的 XSLT也是如此,因为xsl:for-each构造往往是
我已经看到了,但是如果您不理解高效代码的作用,那么它就失去了价值 最佳实践1:尽可能使用模板而不是
当然,不理解某事物在做什么是相对的 XSLT也是如此,因为xsl:for-each构造往往是
- 可读性更强
- 结构不太合理
- 不那么简单,
- 不那么简洁
- 可维护性差很多
- 同样可读(最多!!)如此。至少有模板经验
为了便于阅读,我使用了
xsl:template
标记。它非常简洁,使用简单。将参数传递给模板很简单。这种技术称为封装,是良好编程的基础之一。I.优雅的XSLT代码
人们经常可以找到漂亮的XSLT代码示例,特别是当XSLT用作函数式编程语言时 有关示例,请参见—XSLT2.0的函数式编程库 作为一种FP语言,XSLT也是一种。除其他外,这意味着声明、指定现有关系 这样的定义通常不需要任何额外的代码来产生结果——它本身就是它自己的实现,或者是一个可执行的定义或可执行的规范 下面是一个小例子 此XPath 2.0表达式定义了“自然数的最大值”: 用英语发音时,如果
pNum
为素数,则一个数字的最大素数因子是数字本身,否则如果pNum
为素数,则如果vDiv1
和vDiv2
是pNum
的两个因子,然后,pNum
的最大素因子是vDiv1
和vDiv2
的最大素因子中的较大者
我们如何使用它来实际计算XSLT中的最大素因子我们只需将上面的定义封装在
中,然后。。。得到结果
<xsl:function name="f:maxPrimeFactor" as="xs:integer">
<xsl:param name="pNum" as="xs:integer"/>
<xsl:sequence select=
"if(f:isPrime($pNum))
then $pNum
else
for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
$vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
$vDiv2 in $pNum idiv $vDiv1
return
max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))
"/>
</xsl:function>
那么我们可以,,例如:
f:maxPrimeFactor(600851475143)
=6857
至于效率,这个转换只需要0.109秒
其他精巧高效的XSLT代码示例:
- 问题解决了
- 一句话
- 文本语料库(旧约全书)
- (莎士比亚的奥赛罗)
以下是一些编写“高质量XSLT代码”的规则,摘自 可以使用检查/强制执行:
<xsl:function name="f:maxPrimeFactor" as="xs:integer">
<xsl:param name="pNum" as="xs:integer"/>
<xsl:sequence select=
"if(f:isPrime($pNum))
then $pNum
else
for $vEnd in xs:integer(floor(f:sqrt($pNum, 0.1E0))),
$vDiv1 in (2 to $vEnd)[$pNum mod . = 0][1],
$vDiv2 in $pNum idiv $vDiv1
return
max((f:maxPrimeFactor($vDiv1),f:maxPrimeFactor($vDiv2)))
"/>
</xsl:function>