使用xsl转换xml时保留xml中使用的换行符

时间:2011-01-25 09:41:35

标签: xslt

我正在使用xsl转换xml。我从Oracle数据库获取xml。当我转换时,我无法以实际存储的格式查看数据。在特定节点中,使用的换行符是看到的在xml中但是当我转换时我无法看到换行符。在particluar节点中的所有内容都显示在一行中。

有人可以帮我解决如何在xml ???

中包含已存在的换行符

由于 RAGHAV

3 个答案:

答案 0 :(得分:1)

如上所述,如果您使用的是MSXML,请检查它是否配置为保留空格。

同时检查样式表是否使用<xsl:strip-space>

此外,如果您使用的是XSLT 2.0,则默认情况下,对于在DTD或模式中定义的元素具有仅元素内容,空白被剥离。

此外,当然你的样式表代码可以使用空白文本节点,而不是将它们复制到输出中。

答案 1 :(得分:0)

XML和派生类压缩空格,所以对解析器来说,它们并不重要。 但是,一些解析器可以选择保留空白区域。 在MSXML中,将DomDocument的preserveWhiteSpace属性设置为true。

答案 2 :(得分:0)

尝试使用此转换

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>
 <xsl:preserve-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

如果仍未显示换行符,则表示XML解析器正在剥离所有仅限空格的文本节点。阅读文档如何调用解析器以便禁止此默认操作 - 就像Deanna对MSXML的回答中所建议的那样。

如果上述转换的结果确实包含换行符,那么您在代码中执行了一些您未向我们展示的内容,这会导致不显示这些换行符。