我正在测试项目所需的代码,但是输出中存在意外的空格,这可能会出现问题。 <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.
最佳答案
作为 DanielHaley 撰写的第二条评论的后续内容 (空白来自...):
需要一些 XSLT 和洞察力方面的经验才能发现 你的脚本出了什么问题,显然 DanielHaley 写道 他第一眼看到你的问题后就给出了正确的解决方案。
您可能习惯于嵌入式 XSLT 代码的逐步缩进,
例如在您的for-each-group
内循环有 3 个同样缩进的
行:
-
xsl:value-of
, -
xsl:text
- 开始标签, -
/xsl:text
- 结束标签。
从某种程度上来说,这是件好事。看起来很整洁,但有时候也是需要的 弄清楚你用这样的代码实际上说了什么。
<xsl:text>
之后你实际上有:
- 换行符,
- 多个空格(或制表符),
- 最后
</xsl:text>
,关闭要输出的文本。
因此,您想要输出的内容之间存在差异 以及您的(看起来整洁的)脚本实际输出的内容。 您只想输出换行符,而您的代码实际上 输出一些额外的空格,破坏结果。
现在,至少,您获得了一些如何编写 XSLT 代码的经验 以及如何避免此类错误。
关于xml - XSLT 2.0 转换的文本输出中存在过多空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51528401/