XSLT使用空行

时间:2012-12-04 12:35:14

标签: xml windows xslt ms-word word-2003

我有以下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表示为Word XML中的<code>元素(具有特定样式)。

<?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>

如果我再次运行XLST定义的XML,我会得到以下结果:

$ 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>元素中使用的任何内容仅在一行中可见,但我的<code>文本有多行,这就是为什么我还需要多行。

我听说我可以使用<xsl:text><![CDATA[ ... ]]>,但我无法生成实际创建多行 {{1}的XML Microsoft Word中的部分。

编辑:雅各布,如果我使用它,我没有换行。结束XML如下,不打印换行符:

<code>

评论:我不知道输出应该是什么样的,因为我不是XML专家;如果我知道我可能会自己写这个。因此,只要有效,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> 块。我希望代码块的显示方式与<code> XML节点中显示的完全相同,包括新行和所有内容。在这种情况下,确切的输出(一旦用Word打开)应显示以下内容:

<mtext>

请注意,特殊字符会正确显示并且存在换行符。问题在于<script> // a Javascript example alert("Hello World"); </script> 元素在一行中显示所有内容,这是我不想要的,但不知道还有什么可以使用。

1 个答案:

答案 0 :(得分:1)

使用xsl:output,template,element或of lvl上的xml:space来保留换行符/空格。