我正在创建一些xsl来将我的xml转换为文本(最终将是csv)。我正在使用VS2008。当我使用编辑器创建xsl时,转换后的输出按照我的xsl缩进。但是,如果我编辑xsl并删除格式化的空格,它会正确输出 - 但这样做是一个噩梦。
是否有一些xsl预处理器命令或标记我可以放入以防止这种情况?我想忽略xsl中的任何空格,只使用<!CDATA[]]>
或<xsl:text>
输出文字。
我的XSL如下 - 这缩进了输出
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="text" indent="no"/>
<!-- @* is all class attributes -->
<xsl:template match="/">
<xsl:text>CSV Output</xsl:text>
<!-- Start of output -->
<xsl:for-each select="//rows/row">
<![CDATA[row id=]]><xsl:value-of select="(@id)"/>
</xsl:for-each>
<!-- OK, that is the end of the file -->
<![CDATA[<EOF>]]>
</xsl:template>
</xsl:stylesheet>
输出如下:
CSV Output
row id=0
row id=1
<EOF>
但是,以下输出正确:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="text" indent="no"/>
<!-- @* is all class attributes -->
<xsl:template match="/">
<xsl:text>CSV Output</xsl:text>
<!-- Start of output -->
<xsl:for-each select="//rows/row">
<![CDATA[row id=]]><xsl:value-of select="(@id)"/>
</xsl:for-each>
<!-- OK, that is the end of the file -->
<![CDATA[<EOF>]]>
</xsl:template>
</xsl:stylesheet>
输出正确如下:
CSV Output
row id=0
row id=1
<EOF>
我还想控制包含新行的位置。在我的xsl中,我并没有告诉它包含一个。
请帮助!!
谢谢,
Andez
答案 0 :(得分:6)
XSLT处理器仅在XSLT元素之间剥离模板中的空白文本节点。
所以,在
<xsl:for-each select="//rows/row">
<![CDATA[row id=]]><xsl:value-of select="(@id)"/>
</xsl:for-each>
xsl:for-each
元素有两个空格文本子节点:一个在xsl:value-of
之后,被剥离;另一个在CDATA部分之前,没有剥离。
底线:使用xsl:text
元素。
<xsl:for-each select="//rows/row">
<xsl:text><![CDATA[row id=]]></xsl:text>
<xsl:value-of select="@id"/>
</xsl:for-each>
答案 1 :(得分:5)
您可以使用xsl:strip
元素声明哪些元素不应包含空格(或对所有元素使用*
):
<xsl:strip-space elements="*"/>
计数器部分为xsl:preserve
,允许您声明哪些元素应保留空格。你可以使用两者:
<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="td span"/>
<!-- strip spaces from all elements apart from td and span elements -->