我有一个结构如下的xml:
<xxx>
<yyy>
some text with spaces inside
</yyy>
<zzz>
another text
</zzz>
</xxx>
我想生成将使用white-space:pre样式格式化的html,但我必须从节点yyy和zzz中删除换行符。
我的输出应该是这样的:
<div><div>some text with spaces inside</div><div>another text</div></div>
我试过
<xsl:output method="html" indent="no"/>
<xsl:strip-space elements="*"/>
但它不起作用。换行符仍在那里。
我不能使用normalize-space,因为单词之间的空格很重要。
答案 0 :(得分:3)
以下XSL会从元素yyy
和zzz
中删除所有换行符:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="/xxx">
<div>
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="yyy | zzz">
<div>
<xsl:value-of select="translate(.,'
', '')" />
</div>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
因为您只想从字符串中删除第一个和最后一个字符,所以这个更简单的转换就是这样做:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="yyy/text() | zzz/text()">
<xsl:value-of select="substring(.,2, string-length() -2)"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档:
<xxx>
<yyy>
some text with spaces inside
</yyy>
<zzz>
another text
</zzz>
</xxx>
产生了想要的正确结果:
<xxx>
<yyy>some text with spaces inside</yyy>
<zzz>another text</zzz>
</xxx>
请注意:在更复杂的情况下,您可能想要去除所有前导空格和所有尾随空格。
如果您使用 trim()
中的 FXSL 功能/模板,则可以执行此操作:
以下是使用trim()
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="trim.xsl"/>
<!-- to be applied on trim.xml -->
<xsl:output method="text"/>
<xsl:template match="/">
'<xsl:call-template name="trim">
<xsl:with-param name="pStr" select="string(/*)"/>
</xsl:call-template>'
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<someText>
This is some text
</someText>
生成了想要的(修剪过的)结果:
'This is some text'