2011-05-04 47 views
0

我的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做样式的原因是因为块可能有和应用的风格,混合我n随机文本。它在段落中定义某些单词。

回答

1

你的XSLT代码

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

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

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

  1. <xs:copy>那份选择的节点,但不是它的属性或子
  2. <xs:copy-of>那份整个选择的XML片段(=也是所有后代和属性)
  3. 身份模板即具有递归模板<xs:copy>
+0

Jasso,很好的发现,我完全错误的路线。谢谢,xsl:copy-of是一种享受。 – learnerplates 2011-05-04 11:38:02

+0

+1正确答案。尽管此_“节点集的字符串值(例如:选中多个元素)是集合中第一个节点的字符串值。”_仅对XSLT 1.0有效 – 2011-05-04 16:24:23

相关问题