Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 编写有效的XSLT_Xml_Xslt - Fatal编程技术网

Xml 编写有效的XSLT

Xml 编写有效的XSLT,xml,xslt,Xml,Xslt,编写有效XSLT的原则和模式是什么? 当我说“有效”时,我的意思是它是有效的 结构良好,可读性强 简洁 高效(即具有良好的性能) 简而言之,我正在寻找XSLT的最佳实践 我已经看到了,但是如果您不理解高效代码的作用,那么它就失去了价值 最佳实践1:尽可能使用模板而不是(这是99%的情况) (我是否可以在最佳实践中添加可维护性作为额外的组成部分,哪怕是最重要的部分) 要理解xsl,您确实需要一些实践。 当然,不理解某事物在做什么是相对的 XSLT也是如此,因为xsl:for-each构造往往是

编写有效XSLT的原则和模式是什么?

当我说“有效”时,我的意思是它是有效的

  • 结构良好,可读性强
  • 简洁
  • 高效(即具有良好的性能)
  • 简而言之,我正在寻找XSLT的最佳实践


    我已经看到了,但是如果您不理解高效代码的作用,那么它就失去了价值

    最佳实践1尽可能使用模板而不是(这是99%的情况)

    (我是否可以在最佳实践中添加可维护性作为额外的组成部分,哪怕是最重要的部分)

    要理解xsl,您确实需要一些实践。
    当然,不理解某事物在做什么是相对的

    XSLT也是如此,因为xsl:for-each构造往往是

    • 可读性更强
    对于新手来说,但事实上

    • 结构不太合理
    • 不那么简单,
    • 不那么简洁
    • 可维护性差很多
    而不是模板,并且仅限于

    • 同样可读(最多!!)如此。至少有模板经验
    永远不要使用元素

    我承认,这个标题有点夸张 夸张地说,确实存在,我一直 告诉,在这种情况下,“每个都有一个xsl” 可以有它的优点,但是那些情况 非常非常罕见

    我曾经不得不想出一个公平的办法 中复杂的xml/xslt客户端站点 不到一周,就用了 每一个元素都在这个地方。 几年后的今天, 更明智的是,我花时间重写了 初始代码,仅使用模板。 现在的代码要干净得多 适应性更强

    要么你知道,要么你 应该:几乎总是 干得好。如果您是xsl-ing,那么 不完全理解这些标签, 现在停止你的工作,学习它们,找一份工作 啊哈,埃利布尼斯,继续你的工作吧 作为一个重生的人


    为了便于阅读,我使用了
    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代码”的规则,摘自

    可以使用检查/强制执行:

  • dontusedoubleslashOperatorNarroot:避免在大型树的根附近使用运算符//

  • DontUseDoubleSlashOperator:避免在XPath表达式中使用运算符//

  • SettingValueOfVariable不正确:如果指定字符串值,请使用“选择”语法为变量指定值

  • EmptyContentInInstructions:不要将空内容用于诸如“xsl:for each”“xsl:if”“xsl:when”等指令

  • DontUseNodeSetExtension:如果使用XSLT2.0,则不要使用节点集扩展函数

  • RedundantNamespaceDeclarations:xsl:stylesheet元素中存在冗余的命名空间声明

  • UnusedFunction:样式表函数未使用

  • UnusedNamedTemplate:样式表中的命名模板未使用

  • UnusedVariable:变量在样式表中未使用

  • UnusedFunctionTemplateParameter:函数或模板参数在函数/模板体中未使用

  • TooManySmallTemplates:样式表中的低粒度模板太多(10个或更多)

  • 单片设计:在样式表中使用单个模板/函数。您可以将代码模块化

  • OutputMethodXml:在生成HTML代码时使用输出方法“xml”

  • NotUsingSchemaTypes:在XSLT2.0模式下工作时,样式表未使用任何内置模式类型(xs:string等)

  • UsingName或LocalName函数:Usi
     <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>