1

我有这个传入的 XML 我正在转换(使用 msxsm6 在 ASP 中使用 XSLT):

<Cell>  
  <Data xmlns="http://www.w3.org/TR/REC-html40">  
    <Font>Text1</Font>  
    <Font> </Font>  
    <Font>Text2</Font>  
  <Data>  
</Cell>

如果 <Font> 的模板是:

<xsl:template match="Font">
  <xsl:copy/>
</xsl:template>

转换似乎消除了源中第二个元素中的空格字符,发出的输出 XML 如下,第二个元素变成没有内容的空元素:

    <Font>Text1</Font>  
    <Font/>  
    <Font>Text2</Font>  

我在 <xsl:preserve-space elements="Font"/>' 上反复试验,但这似乎没有帮助。想法?感谢 Stackoverflow!

4

2 回答 2

2

首先,您的样式表片段示例是错误的。你需要这样的规则:

<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"唯一的解决方案是在输入源中添加属性。

于 2010-10-08T16:07:09.320 回答
1

如果模板为:

<xsl:template match="Font"> 
  <xsl:copy/> 
</xsl:template>

变换似乎杀死了源中第二个元素中的空格字符

你误 <xsl:copy> 认为 <xsl:copy-of>

前者只复制当前元素及其命名空间节点(不复制属性或后代节点),而后者复制以当前节点为根的完整子树。

此外,正如@Alejandro 所指出的,您遇到了命名空间问题,并且提供的 XSLT 代码在应用于提供的 XML 文档时不可能产生提供的“结果”。

于 2010-10-08T16:23:14.113 回答