编写有效的XSLT

时间:2009-04-12 00:24:53

标签: xml xslt

编写有效的XSLT有哪些原则和模式?

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

  1. 结构良好且易读
  2. 简洁,简洁
  3. 高效(即表现良好)
  4. 简而言之,我正在寻找XSLT的最佳实践。

    我已经看过the question regarding efficiency,但如果您无法理解它正在做什么,有效的代码会失去它的价值。

5 个答案:

答案 0 :(得分:10)

答案 1 :(得分:8)

最佳做法1 使用模板而不是&lt; xsl:for-each&gt; ,只要你能做到(<99%的情况下)

(我可以在最佳实践中添加MAINTAINABILITY作为额外成分,甚至是最重要的实践)

为了理解xsl,你真的需要一些练习 不明白什么......当然,这是非常相对的。

这对于XSLT来说是双重的,因为xsl:for-each构造往往是

  • 更具可读性

对于新手,但实际上是

  • 结构不合理,
  • 不太简单,
  • 不那么简洁和
  • 维护性较差

比模板,只有

  • equaly可读(充其量!!)。具有最少的模板经验。
  

永远不要使用&lt; xsl:for-each&gt; ELEMENT!

     

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

     

我曾经不得不公平地提出   复杂的xml / xslt客户端站点   不到一个星期,用过了   for-each元素到处都是。   现在,几年后,有点,   更聪明,我花了我的时间重写了   初始代码,仅使用模板。   现在的代码更清晰了   更具适应性。

     

要么你知道这个,要么你知道   应该:&lt; xsl:template&gt;和&lt; XSL:   应用模板&GT;几乎都是   要走的路。如果你是xsl-ing,那么你   不完全理解这些标签,   现在停止工作,学习它们,得到一个   aha-erlebnis,继续你的工作   作为一个重生的男人。

答案 2 :(得分:5)

我认为回答这个问题的好方法是从另一方面接近它。什么做法使XSLT 无效,为什么?

我见过的一些导致XSLT无效的事情:

  1. 过度使用for-each每个人都说过;我再说一遍。我发现for-each通常是开发人员尝试以声明性语言使用传统编程技术的标志。

  2. 未充分利用XPath。我见过很多糟糕的XSLT纯粹是因为开发人员不理解谓词,轴说明符position()和{{1}因此,他使用XSLT构造实现了逻辑。

  3. 未充分利用元数据。有时,您可以通过提供元数据转换来消除巨大的数量的XSLT。

  4. 未充分利用预处理。例如,如果XML文档包含必须使用XSLT字符串操作进行解析的数据,则执行以外的所有解析通常要简单得多。 XSLT并将解析后的结果添加到XML中,或将解析后的结果作为参数传递给转换。我已经看到一些非常难以维护的XSLT实现业务逻辑,这在C#或Python中实现起来很简单。

  5. 我在自己的XSLT世界中遇到的最大问题(我有几个3000多个线路转换,我正在维护)是死代码。我确信我的变换中有模板永远不会再使用,因为他们测试的条件永远不会再出现。没有办法以编程方式确定current()之类的东西是活着还是已死,因为它取决于元数据无法告诉你的东西。

答案 3 :(得分:4)

文件问题

<强> 1。很多小文件比几个大文件要好。

将hamburger.xsl拆分为i-bread.xsl和i-beef.xsl。

<强> 2。带有'i - '的前缀包含/导入的文件。

它可以作为一个指示器,谨慎编辑文件,因为您可以破坏导入/包含文件的功能。在提交更改之前检查它们。

第3。切勿包含/导入未加前缀的文件。

如果你想制作一个cheeseburger.xsl,请不要包含hamburger.xsl。相反,包括i-bread.xsl,i-beef.xsl和新创建的i-cheese.xsl。

答案 4 :(得分:1)

为了便于阅读,我使用xsl:template标签。它非常简洁易用。将参数传递给模板很简单。这种技术称为封装,是良好编程的基础之一。