我正在测试项目所需的代码,但是输出中有意外的空白,这将是有问题的。 <xsl:text>
元素 应该 的放置只会导致换行,但是我可能错了。我最大的担心是由于我缺乏经验, 我 会生成多余的空格,因此,我们将不胜感激。样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="files">
<xsl:for-each-group select="file" group-by="@project">
<xsl:value-of select="current-grouping-key()"/>
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
测试源:
<?xml version="1.0" encoding="utf-8"?>
<files>
<file name="swablr.eps" size="4313" project="mars"/>
<file name="batboy.wks" size="424" project="neptune"/>
<file name="potrzebie.dbf" size="1102" project="jupiter"/>
<file name="kwatz.xom" size="43" project="jupiter"/>
<file name="paisley.doc" size="988" project="neptune"/>
<file name="ummagumma.zip" size="2441" project="mars"/>
<file name="schtroumpf.txt" size="389" project="mars"/>
<file name="mondegreen.doc" size="1993" project="neptune"/>
<file name="gadabout.pas" size="685" project="jupiter"/>
</files>
实际输出:
mars
neptune
jupiter
所需结果:
mars
neptune
jupiter
我正在通过node-java使用Saxon-HE s9api转换源。到目前为止,我已经尝试了xsl:strip-space
和normalize-space(current-grouping-key())
两者都失败了。预先感谢。
J。
答案 0 :(得分:3)
作为 DanielHaley 发表的第二条评论的后续措施 (空白来自... ):
需要一些XSLT和感知能力方面的经验才能发现 您的脚本出了什么问题,显然是 DanielHaley 写道 乍一看您的问题后,正确的解决方案。
您可能已经习惯于逐步缩进嵌入式XSLT代码,
例如在您的for-each-group
循环中,有3个相同的缩进量
行:
xsl:value-of
,xsl:text
-开头标签,/xsl:text
-结束标记。在某种程度上,这是件好事。看起来很整洁,但有时也需要 弄清楚,您实际上用这些代码说了什么。
在<xsl:text>
之后,您实际上已经:
</xsl:text>
,关闭要输出的文本。因此,您打算输出的内容有所不同 以及您的(看上去很漂亮的)脚本输出的实际上。 您只想输出换行符,而您的代码实际上 输出一些多余的空格,破坏结果。
现在,至少,您已经获得了一些有关如何编写XSLT代码的经验。 以及如何避免此类错误。
答案 1 :(得分:2)
作为一种替代方法,通常也忽略了您也可以根据需要使用xsl:value-of separator="..."
直接分隔包装序列的项目,以便将代码重写为
<xsl:template match="files">
<xsl:value-of separator=" ">
<xsl:for-each-group select="file" group-by="@project">
<xsl:sequence select="current-grouping-key()"/>
</xsl:for-each-group>
</xsl:value-of>
</xsl:template>
答案 2 :(得分:-1)
<xsl:template match="files">
<xsl:for-each-group select="file" group-by="@project">
<xsl:value-of select="current-grouping-key()"/>
<xsl:text>
</xsl:text>
</xsl:for-each-group>
</xsl:template>
check it