XSL/XPath缩进

cdd*_*ddr 6 xslt xpath

缩进XSL代码有哪些约定(如果有的话)?

  • 你如何处理真正漫长而复杂的XPath
  • 你可以将它们插入你选择的XML编辑器吗?
  • 是否有一些开源代码可以很好地完成这项工作?

对于某些背景,我在Emacs中使用nxml-mode.在大多数情况下,它可以配置子元素应缩进的空格数.虽然涉及到复杂的XPath,但它并不是很好.如果我的代码中有一个很长的XPath,我希望通过使它看起来像这样来使它的结构尽可能透明......

<xsl:for-each select="/some
                       /very[@test = 'whatever']
                        /long[@another-test = perhaps
                                               /another
                                                /long
                                                 /xpath[@goes='here']]
                         /xpath"
Run Code Online (Sandbox Code Playgroud)

但是,我目前必须手动执行此操作,因为nxml只会将其与"/某些..."对齐.

Jam*_*lak 1

有时,即使您使用模板而不是 for-eaches(就像您应该的那样,如果可以的话),也无法避免更长的 xpath。在 XSLT/XPath 2.0 中尤其如此:

<xsl:attribute name="tablevel" 
     select="if (following::*[self::topic | self::part]) 
             then (following::*[self::topic | self::part])[1]/@tablevel
             else @tablevel"/>
Run Code Online (Sandbox Code Playgroud)

我倾向于不会打破跨行的“简单”路径,但会在运算符或条件处打破“更大”的路径。

对于编辑,我使用 Oxygen(跨平台),它可以很好地处理这种间距。有时它不能准确预测您想要什么,但一旦存在,即使您重新缩进代码,它也会保留该空间。