当前位置 : 主页 > 网页制作 > xml >

xml – xslt的优雅例子?

来源:互联网 收集:自由互联 发布时间:2021-06-13
在通过XAML进行了长时间的学习循环之后,我又回到了 HTML和 javascript,并意识到声明性代码的概念 – 在转换规则方面 – 是一个非常强大的概念. 尽管语法过多,但XML的XSLT处理是声明性转换
在通过XAML进行了长时间的学习循环之后,我又回到了 HTML和 javascript,并意识到声明性代码的概念 – 在转换规则方面 – 是一个非常强大的概念.

尽管语法过多,但XML的XSLT处理是声明性转换编程的基石.但是,我总是发现很难理解XSLT如何用于日常任务(使用XML).

在生成HTML之外,XSLT优雅地解决编程问题的一些很好的例子是什么?

我猜它擅长图形转换和数据再处理……

编辑:我希望有一些实际的例子 – 让我完全放弃xslt的一个原因是代码的视觉复杂性.

人们经常可以找到漂亮的XSLT代码的例子,特别是当XSLT用作函数式编程语言时.

有关示例,请参阅FXSL 2.0上的this article – XSLT 2.0的函数编程库.

作为FP语言,XSLT也是declarative language.除其他外,这意味着一个声明,指定现有的关系.

这样的定义通常不需要任何额外的代码来产生结果 – 它本身就是它自己的实现,或者是可执行的定义或可执行的规范.

这是一个小例子.

此XPath 2.0表达式定义“自然数的最大Prime Factor”:

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)))

要用英语发音,数字pNum的最大素数因子是数字本身,如果pNum是素数,否则如果vDiv1和vDiv2是pNum的两个因子,则pNum的最大素数因子是最大素数因子中的较大者vDiv1和vDiv2.

我们如何使用它来实际计算XSLT中的最大素数因子?我们简单地将上面的定义包含在< xsl:function>中.并…得到结果!

<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>

我们可以,然后,calculate the MPF for any natural number,例如:

f:maxPrimeFactor(600851475143)= 6857

至于效率,这个转换只需0.109秒.

优雅和高效的XSLT代码的其他示例:

> Tim Bray‘s Wide Finder,已解决here.
> Cascade deletions
> Transitive closure
> Finding all anagrams一个字
> Concordance文本语料库(旧约)
> Spelling checking(莎士比亚的奥赛罗)
> Sudoku solver
>通用编译器 – 编译器系统 – the LR-Parsing Framework of FXSL,成功用于a parser of JSON和XPath2.0.

网友评论