2011-05-04 49 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

相關問題