XSL输出方法文本,包括xsl中的空格

And*_*dez 3 xslt methods whitespace text

我正在创建一些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>
Run Code Online (Sandbox Code Playgroud)

输出如下:

CSV Output
      row id=0
      row id=1
    <EOF>
Run Code Online (Sandbox Code Playgroud)

但是,以下输出正确:

<?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>
Run Code Online (Sandbox Code Playgroud)

这输出正确如下:

CSV Output
row id=0
row id=1
<EOF>
Run Code Online (Sandbox Code Playgroud)

我还想控制包含新行的位置.在我的xsl中,我并没有告诉它包含一个.

请帮忙!!

谢谢,

Andez

小智 6

XSLT处理器仅在XSLT元素之间剥离模板中的空白文本节点.

所以,在

<xsl:for-each select="//rows/row"> 
  <![CDATA[row id=]]><xsl:value-of select="(@id)"/> 
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 5

您可以使用该xsl:strip元素声明哪些元素不应具有空格(或*用于所有元素):

<xsl:strip-space elements="*"/>
Run Code Online (Sandbox Code Playgroud)

计数器部分xsl:preserve允许您声明哪些元素应保留空格.你可以使用两者:

<xsl:strip-space elements="*"/>
<xsl:preserve-space elements="td span"/>
<!-- strip spaces from all elements apart from td and span elements -->
Run Code Online (Sandbox Code Playgroud)