javax.xml.transform.Transformer正在删除所需的空格(将XML转换为文本)

| 我正在尝试使用javax.xml.transform将XML转换为文本。 xsltproc将正确地将我的XML转换为格式正确的文本,而以下代码生成的输出几乎删除了所有空格:
final ByteArrayOutputStream out = new ByteArrayOutputStream();

final InputStream  is          = getClass().getResourceAsStream( xslResourceName );
final StreamSource xsltSrc     = new StreamSource( is );
final Transformer  transformer = tFactory.newTransformer( xsltSrc );
final Source       src         = new StreamSource( new StringReader( xmlData ) );
final Result       res         = new StreamResult( out );

transformer.setOutputProperty( \"method\", \"text\" );
transformer.setOutputProperty( \"omit-xml-declaration\", \"yes\" );
transformer.transform( src, res );

return out.toString();
XSLT故意使用以下标记来添加空格:
<xsl:value-of select=\"substring(concat(concat($frontpadding,$cellvalue),$blank),1,$width)\"/>
对于较大的示例,源xml可能具有:
<reportheader display=\"true\">
  <name>Hours01</name>
  <date>2011-04-14</date>
  <description>Hours Report</description>
  <pagewidth>130</pagewidth>
</reportheader>
xsl具有:
<xsl:template match=\"reportheader\">
<xsl:if test=\"@display=\'true\'\">
    <xsl:variable name=\"col1width\" select=\"12\"/>
    <xsl:variable name=\"datewidth\" select=\"10\"/>
    <xsl:variable name=\"col2width\" select=\"$pagewidth - $col1width - $datewidth\"/>
    <xsl:copy-of select=\"substring(concat(name,$blank),1,$col1width)\"/>
    <xsl:copy-of select=\"substring(concat(description,$blank),1,$col2width)\"/>
    <xsl:copy-of select=\"substring(concat(date,$blank),1,$datewidth)\"/> 
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>&#xa;</xsl:text>
</xsl:if>
</xsl:template>
xsltproc输出为:
Hours01     Hours Report                                                                                                2011-04-14
而且javax.xml.transformer.Transformer的输出是:
Hours01Hours Report2011-04-14
    
已邀请:
您如何定义$ blank?当我做
<xsl:variable name=\"blank\">                                  </xsl:variable>
我得到的结果和你一样。但是,以下产生了您想要的结果
<xsl:variable name=\"blank\" select=\"\'                                                \'\"/>
    
尝试使用xml字符在xslt中留出空间。
&#160;
或使用文字标签。
<xsl:text> </xsl:text>
我希望这有帮助。     

要回复问题请先登录注册