我有下面的XML:XSLT使用空行
<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将上述多行文本表示为Word中的<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 agains定义的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[ ... ]]>
,但我不能够产生实际上将在Microsoft Word中多<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>
<script>
// a Javascript example
alert("Hello World");
</script>
</w:t></w:r>
</w:p>
评论:我不知道输出应该是什么样子,因为我不是XML大师;如果我知道我可能会自己写这个。所以只要它能工作,XML就可以看起来像它喜欢的一样。通过作品我的意思是,它显示我想要的方式<code>
块。我希望代码块的显示与<mtext>
XML节点中显示的完全一致,并附有新行和所有内容。在这种情况下,精确的输出(一次已经与Word中打开)显示如下:
<script>
// a Javascript example
alert("Hello World");
</script>
注意,特殊字符正确显示和换行符都存在。问题在于<w:t>
元素在一行中显示所有内容,这是我不想要的,但不知道还有什么要使用。
请编辑问题并提供您想要的确切转换结果。 –
@Administrator,你需要用你期待的“RESULT XML”来更新你的问题!虽然你不能实现你想要的东西......“手动输入你想要输出的东西”,这样可以让我们更容易理解问题,而不是通过复杂的线条来读取。 –
我已经更新了回答。因为我不知道XML应该是什么样子,所以我提前申请了,但这就是我问这个问题的原因。谢谢 – administrator