0

次の XML があります。

<node><mtype>code</mtype><mtext>&lt;script&gt;
 // a Javascript example
 alert("Hello World");
 &lt;/script&gt;</mtext></node>

HTML の同じテキストは、次のように記述されます。

<pre><code>&lt;script&gt;
 // a Javascript example
 alert("Hello World");
 &lt;/script&gt;</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>
     &lt;script&gt;
     // a Javascript example
     alert("Hello World");
     &lt;/script&gt;
 </w:t></w:r>
</w:p>

コメント:私は XML の第一人者ではないので、出力がどのように表示されるかわかりません。もし私が知っていれば、おそらく自分でそれを書くことができるでしょう. したがって、XML は、機能する限り、好きなように表示できます。作品とは、<code>ブロックを思い通りに表示することを意味します。コード ブロックを、XML ノードに表示されるのとまったく同じように<mtext>、新しい行とすべてを含めて表示したいと考えています。この場合、正確な出力 (Word で開いた後) は次のようになります。

<script>
// a Javascript example
alert("Hello World");
</script>

特殊文字が正しく表示され、改行が存在することに注意してください。問題は、<w:t>すべてを 1 行で表示する要素にあります。これは望ましくありませんが、他に何を使用すればよいかわかりません。

4

1 に答える 1

1

改行/スペースを保持するために、xsl:output、テンプレート、要素、または lvl の値で xml:space を使用します。

于 2012-12-04T13:48:43.580 に答える