我有这个传入的XML我正在转换(使用msxsm6在ASP中使用XSLT):
<Cell>
<Data xmlns="http://www.w3.org/TR/REC-html40">
<Font>Text1</Font>
<Font> </Font>
<Font>Text2</Font>
<Data>
</Cell>
如果&lt; Font&gt;的模板是:
<xsl:template match="Font">
<xsl:copy/>
</xsl:template>
转换似乎消除了源中第二个元素中的空格字符,发出的输出XML在下面,第二个元素变为空的,没有内容:
<Font>Text1</Font>
<Font/>
<Font>Text2</Font>
我对&lt; xsl:preserve-space elements =“Font”/&gt;'进行了试验和纠错但这似乎没有帮助。想法?谢谢Stackoverflow!
答案 0 :(得分:1)
首先,样式表片段样本是错误的。您需要这样的规则:
<xsl:template match="html:data//node()|html:data//*/@*"
xmlns:html="http://www.w3.org/TR/REC-html40">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
</xsl:copy>
</xsl:template>
其次,关于输入空白区域只有文本节点。这些将保留,具体取决于XML树提供程序。 MSXSL默认不保留它。唯一的解决方案是在输入源中添加xml:space="preserve"
属性。
答案 1 :(得分:1)
如果模板为:
<xsl:template match="Font"> <xsl:copy/> </xsl:template>
这种转变似乎扼杀了 第二个元素中的空格字符 来源
您误认为 <xsl:copy>
<xsl:copy-of>
前者仅复制当前元素及其命名空间节点(不复制属性或后代节点),而后者复制以当前节点为根的完整子树。
此外,正如@Alejandro所述,您遇到名称空间问题,并且提供的XSLT代码在应用于提供的XML文档时不可能产生提供的“结果”。