如何复制元素内容而不仅仅是字符串?

时间:2011-05-04 09:43:58

标签: c# xml xslt xslcompiledtransform

我的XML确实有一些样式。 XslCompiledTransform Transform的输出结果是HTML,它没有这些样式标记。 有没有办法告诉XslCompiledTransform保留它们?或者XslCompiledTransform是否应该默认保留它们?

这是我的xml

> <codeSnippetFull>
>         <span class="kwrd">event</span> 
>         OnCreate {
>         <span class="kwrd">if</span>
>              (Count == 0)
>                   AddE(D); <span class="rem">//  comment </span>
>         }
>        </codeSnippetFull>

我的xslt只是抽出整个元素

         <xsl:value-of select="THelpDocument/HelpBody/example/codeSnippetFull"/>

这是我的C#,除了应用的默认值之外别无其他:

 // Load the style sheet. 
 XslCompiledTransform xslt = new XslCompiledTransform();
 xslt.Load(args[0]);

......
         xslt.Transform(xmlFileName, Path.Combine(htmlOutputPath, Path.GetFileNameWithoutExtension(xmlFileName) + ".html"));

我没有从xslt做样式的原因是因为块可能有应用的样式,并且随机文本混合使用。它在段落中描述了某些单词。

1 个答案:

答案 0 :(得分:1)

您的XSLT代码

<xsl:value-of select="THelpDocument/HelpBody/example/codeSnippetFull"/>

实际上并不复制<codeSnippetFull>元素的(标记)内容。 <xsl:value-of>用于创建文本节点。 Value-将所选节点转换为字符串。元素的字符串值是作为所选元素的后代的文本节点的串联。节点集的字符串值(例如:选择了多个元素)是集合中第一个节点的字符串值。

要在XSLT中复制元素,可以使用

  1. <xs:copy>复制所选节点但不复制其属性或子项
  2. <xs:copy-of>复制整个选定的XML片段(=所有后代和属性)
  3. 身份模板,即<xs:copy>
  4. 的递归模板