文字列だけでなく要素コンテンツをコピーする方法は?
-
28-10-2019 - |
質問
私のXMLにはいくつかのスタイリングがあります。 XSLCOMPILEDTRANSFORM変換の出力により、これらのスタイルのタグがない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からスタイリングをしていない理由は、ブロックがランダムなテキストと混合されたスタイルを適用できるためです。パラグラフで特定の単語をスタイリングしています。
解決
XSLTコード
<xsl:value-of select="THelpDocument/HelpBody/example/codeSnippetFull"/>
実際には(マークアップ)内容をコピーしません <codeSnippetFull>
エレメント。 <xsl:value-of>
作成に使用されます テキストノード. 。値の値は、選択したノードを文字列に変換します。要素の文字列値は、選択した要素の子孫であるテキストノードの連結です。ノードセットの文字列値(たとえば:選択された複数の要素)は、セットの最初のノードの文字列値です。
XSLTの要素をコピーするには、使用できます
<xs:copy>
それは選択したノードをコピーしますが、その属性や子供ではありません<xs:copy-of>
それは選択されたXMLフラグメント全体をコピーします(=すべての子孫と属性も)- IDテンプレート、つまり再帰テンプレートを使用します
<xs:copy>
所属していません StackOverflow