无法使换行符在 XSLT 中工作到 Excel
Cannot make newline character work in XSLT to Excel
我有一个 XSLT 文件,用于将 XML 转换为输出 XML,其中包含 Excel 标签,如 Row、Cell 等
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">&#10;</xsl:text>
<xsl:value-of select="Second Line" />
</Data>
</Cell>
我正在尝试在我的输出中获取文字字符实体,如下所示:
<Cell>
<Data ss:Type="String">First Line Second Line</Data>
</Cell>
但是,输出 XML 结果是:
<Cell>
<Data ss:Type="String">First Line&#10;Second Line</Data>
</Cell>
因此,当我将输出 XML 保存为 .xls 并在 Excel 365 中打开它时,文本不是多行的。相反,相应的单元格包含文字字符串:
First Line Second Line
我也尝试了下面的方法,但它也不起作用:
<xsl:text disable-output-escaping="yes"><![CDATA[&]]></xsl:text>
这也行不通:
<xsl:text>&#</xsl:text>
<xsl:value-of select="10" />
<xsl:text>;</xsl:text>
如何获得我需要的结果?
我正在使用 Office 365 和 Visual Studio 2012。
您已阐明您正在尝试发出 XML 包含数字字符实体的文本,特别是
。你提出的第一个例子是一个正确的方法,它对我有用,与你的说法相反。
例如处理这个XML:
<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">&#10;</xsl:text>
<xsl:value-of select="'Second Line'"/>
</cell>
</xsl:template>
</xsl:stylesheet>
通过 xsltproc
产生此输出:
<?xml version="1.0"?>
<cell>First Line Second Line</cell>
,据我了解,这就是您要查找的表格。特别是,带有 disable-output-escaping="yes"
的文本字段是发出具有标记形式的文字文本的合适方法。
我倾向于怀疑你所说的你首先尝试的具体方法是否确实产生了你声称的输出。这就是你应该得到的 without disable-output-escaping
,所以你可能在实际测试中省略了那个属性或者拼错了它。如果您完全按照显示的方式包含它并获得了您提供的输出,那么我倾向于认为您的 XSLT 处理器已损坏。
我有一个 XSLT 文件,用于将 XML 转换为输出 XML,其中包含 Excel 标签,如 Row、Cell 等
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">&#10;</xsl:text>
<xsl:value-of select="Second Line" />
</Data>
</Cell>
我正在尝试在我的输出中获取文字字符实体,如下所示:
<Cell>
<Data ss:Type="String">First Line Second Line</Data>
</Cell>
但是,输出 XML 结果是:
<Cell>
<Data ss:Type="String">First Line&#10;Second Line</Data>
</Cell>
因此,当我将输出 XML 保存为 .xls 并在 Excel 365 中打开它时,文本不是多行的。相反,相应的单元格包含文字字符串:
First Line Second Line
我也尝试了下面的方法,但它也不起作用:
<xsl:text disable-output-escaping="yes"><![CDATA[&]]></xsl:text>
这也行不通:
<xsl:text>&#</xsl:text>
<xsl:value-of select="10" />
<xsl:text>;</xsl:text>
如何获得我需要的结果?
我正在使用 Office 365 和 Visual Studio 2012。
您已阐明您正在尝试发出 XML 包含数字字符实体的文本,特别是
。你提出的第一个例子是一个正确的方法,它对我有用,与你的说法相反。
例如处理这个XML:
<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">&#10;</xsl:text>
<xsl:value-of select="'Second Line'"/>
</cell>
</xsl:template>
</xsl:stylesheet>
通过 xsltproc
产生此输出:
<?xml version="1.0"?>
<cell>First Line Second Line</cell>
,据我了解,这就是您要查找的表格。特别是,带有 disable-output-escaping="yes"
的文本字段是发出具有标记形式的文字文本的合适方法。
我倾向于怀疑你所说的你首先尝试的具体方法是否确实产生了你声称的输出。这就是你应该得到的 without disable-output-escaping
,所以你可能在实际测试中省略了那个属性或者拼错了它。如果您完全按照显示的方式包含它并获得了您提供的输出,那么我倾向于认为您的 XSLT 处理器已损坏。