次の XML があります。
<node><mtype>code</mtype><mtext><script>
// a Javascript example
alert("Hello World");
</script></mtext></node>
HTML の同じテキストは、次のように記述されます。
<pre><code><script>
// a Javascript example
alert("Hello World");
</script></code></pre>
実際のテキストは HTML でエンコードされていることがわかりますが、これは問題ありません。次にやりたいことは、次の XSLT を使用して、上記の mtext を<code>
Word XML の要素として (特定のスタイルで) 表現することです。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
>
<xsl:template match="/">
<xsl:for-each select="/node">
<xsl:if test="mtype = 'code'">
<w:p>
<w:pPr><w:jc w:val="left" /></w:pPr>
<!--<xsl:text select="mtext/node()"/>-->
<w:r><w:t><xsl:value-of select="mtext/node()" disable-output-escaping="yes"/></w:t></w:r>
</w:p>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
定義された XML に対して XLST を実行すると、次のようになります。
$ xsltproc code.xslt code.xml
<?xml version="1.0"?>
<w:p xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"><w:pPr><w:jc w:val="left"/></w:pPr><w:r><w:t><script>
// a Javascript example
alert("Hello World");
</script></w:t></w:r></w:p>
これは私が達成したいことではありません。最初は実際の特殊文字であり、より重要なのは削除された改行です。要素で使用する<w:t>
ものはすべて 1 行でしか表示されませんが、<code>
テキストは複数行あるため、複数行も必要です。
<xsl:text>
またはを使用できると聞いたことがありますが、Microsoft Word で実際に複数行<![CDATA[ ... ]]>
のセクションを作成する XML を生成できませんでした。 <code>
編集:ヤコブ、それを使用すると、改行がありません。末尾の XML は次のとおりで、改行は出力されません。
<w:p wsp:rsidR="005963F5" wsp:rsidRDefault="00804A03" wsp:rsidP="00804A03" xml:space="preserve">
<w:pPr><w:jc w:val="left"/><w:pStyle w:val="VirisCode"/></w:pPr>
<w:r><w:t>
<script>
// a Javascript example
alert("Hello World");
</script>
</w:t></w:r>
</w:p>
コメント:私は XML の第一人者ではないので、出力がどのように表示されるかわかりません。もし私が知っていれば、おそらく自分でそれを書くことができるでしょう. したがって、XML は、機能する限り、好きなように表示できます。作品とは、<code>
ブロックを思い通りに表示することを意味します。コード ブロックを、XML ノードに表示されるのとまったく同じように<mtext>
、新しい行とすべてを含めて表示したいと考えています。この場合、正確な出力 (Word で開いた後) は次のようになります。
<script>
// a Javascript example
alert("Hello World");
</script>
特殊文字が正しく表示され、改行が存在することに注意してください。問題は、<w:t>
すべてを 1 行で表示する要素にあります。これは望ましくありませんが、他に何を使用すればよいかわかりません。