代码之家  ›  专栏  ›  技术社区  ›  cddr

XSL/XPath缩进

  •  6
  • cddr  · 技术社区  · 16 年前

    您使用什么约定(如果有的话)来缩进XSL代码?

    • 你怎么处理长而复杂的XPath?
    • 你能把它们插入到你选择的XML编辑器中吗?
    • 是否有一些开源代码可以很好地完成这项工作?

    对于某些背景,我在Emacs中使用NXML模式。在大多数情况下,它是确定的,您可以配置子元素缩进的空格数。不过,当涉及复杂的xpaths时,情况并不太好。如果代码中有一个较长的xpath,我希望通过使其看起来像这样,使其结构尽可能透明…

    <xsl:for-each select="/some
                           /very[@test = 'whatever']
                            /long[@another-test = perhaps
                                                   /another
                                                    /long
                                                     /xpath[@goes='here']]
                             /xpath"
    

    但是,我目前必须手动执行,因为NXML只会将其全部与“/some…”对齐。

    4 回复  |  直到 15 年前
        1
  •  1
  •   James Sulak    15 年前

    有时无法避免较长的xpath,即使您使用模板而不是用于eaches(如果可以的话,您应该这样做)。在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"/>
    

    我倾向于不打破一条“简单”的路径,而是在操作符或条件中打破“较大”的路径。

    编辑时,我使用氧气(跨平台),它可以很好地处理这种间距。有时它不能准确地预测您想要什么,但一旦它在那里,它将保持空间,即使您重新缩进代码。

        2
  •  1
  •   Azat Razetdinov    16 年前

    在我看来,长时间的xpaths很难阅读,应该避免。有两种方法可以做到:

    1. 简化源XML。
    2. 将大模板拆分为小模板。
        3
  •  1
  •   Ishmael    15 年前

    不要用长的XPath。放弃并使用匹配模板。将xpath分解为几个模板。阅读一堆琐碎的匹配模板比阅读其中一个要容易得多。

        4
  •  1
  •   Isaac Dealey    15 年前

    如果我在读取xpath语句时遇到困难(这不太常见,但偶尔会发生),我倾向于以不同的方式分解xsl…实际上,它与我为其他语言分解语法的方法非常相似…因此,问题中的示例可能会变得更像这样:

    <xsl:for-each select="/some/very[@test = 'whatever']/long">
      <xsl:if test="@another-test = perhaps/another/long/xpath[@goes='here']">
        <xsl:for-each select="xpath">
          ... result xml ....
        </xsl:for-each>
      </xsl:if>
    </xsl:for-each>