无法使换行符在XSLT到Excel中工作

时间:2017-09-26 14:07:03

标签: excel xslt transform newline ampersand

我有一个XSLT文件,用于将XML转换为包含Excel标签(如Row,Cell等)的输出XML。

XSLT文件的行如下:

    <xsl:output method="xml" version="1.0" indent="yes" />

我需要在单个Excel单元格中显示多行文字,我正在尝试通过此模板创建该单元格:

<Cell>
  <Data ss:Type="String">
    <xsl:value-of select="First Line" />
      <xsl:text disable-output-escaping="yes">&amp;#10;</xsl:text>
    <xsl:value-of select="Second Line" />
  </Data>
</Cell>

我正在尝试在输出中获取文字字符实体,如下所示:

<Cell>
  <Data ss:Type="String">First Line&#10;Second Line</Data>
</Cell>

但相反,输出XML出现了:

<Cell>
  <Data ss:Type="String">First Line&amp;#10;Second Line</Data>
</Cell>

因此,当我将输出XML保存为.xls并在Excel 365中打开它时,文本不是多行的。相反,相应的单元格包含并列字符串:

  

First Line&amp;#10; Second Line

我也尝试过以下内容,但它也不起作用:

<xsl:text disable-output-escaping="yes"><![CDATA[&]]></xsl:text>

这也不起作用:

<xsl:text>&amp;#</xsl:text>
<xsl:value-of select="10" />
<xsl:text>;</xsl:text>

如何获得我需要的结果?

我正在使用Office 365和Visual Studio 2012。

1 个答案:

答案 0 :(得分:0)

您澄清说您正在尝试发出包含数字字符实体的XML文本,特别是filename=$1 : code goes here 。您提供的第一个示例是正确的方法,它适用于我,与您的主张相反。

例如,处理此XML:

for filename in "$@"; do
  : put your code here
done

根据此样式表:

&#10;

via <cell/> 生成此输出:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" version="1.0" indent="yes"/>

  <xsl:template match="cell">
    <cell>
      <xsl:value-of select="'First Line'"/>
      <xsl:text disable-output-escaping="yes">&amp;#10;</xsl:text>
      <xsl:value-of select="'Second Line'"/>
    </cell>
  </xsl:template>

</xsl:stylesheet>

,正如我所理解的那样,这是您正在寻找的形式。特别是,带有xsltproc的文本字段是用于发出具有标记形式的文本文本的适当方法。

我倾向于怀疑你说你先尝试的具体方法确实产生了你声称它的输出。那就是你应该得到的没有 <?xml version="1.0"?> <cell>First Line&#10;Second Line</cell> ,所以也许你在实际的测试中省略了那个属性或拼写错误。如果你完全按照显示的方式包含它并得到你提供的输出,那么我倾向于认为你的XSLT处理器坏了。