您使用哪些约定(如果有)来缩进XSL代码?
对于某些背景,我在Emacs中使用nxml-mode。在大多数情况下,它可以配置子元素应缩进的空格数。虽然涉及到复杂的XPath,但它并不是很好。如果我的代码中有一个很长的XPath,我希望通过使它看起来像这样的结构尽可能透明......
<xsl:for-each select="/some
/very[@test = 'whatever']
/long[@another-test = perhaps
/another
/long
/xpath[@goes='here']]
/xpath"
但是,我目前必须手动执行此操作,因为nxml只会将其与“/ some ..”对齐。
答案 0 :(得分:1)
在我看来,很长的xpath难以阅读,应该避免。有两种方法可以做到:
答案 1 :(得分:1)
如果我在阅读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>
答案 2 :(得分:1)
不要使用长xpath。抛弃for-each并使用匹配模板。将xpath分解为几个模板。阅读一堆琐碎的匹配模板要比其中一个更容易。
答案 3 :(得分: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"/>
我倾向于不打破跨越行的“简单”路径,但会破坏运营商或条件下的“更大”路径。
为了编辑,我使用Oxygen(它是跨平台的)并且它很好地处理这种间距。有时候它并不能准确地预测你想要什么,但是即使你重新缩进你的代码,它也会在那里保持空间。