2012-12-04 14 views
0

我有下面的XML:XSLT使用空行

<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将上述多行文本表示为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> 
    &lt;script&gt; 
    // a Javascript example 
    alert("Hello World"); 
    &lt;/script&gt; 
</w:t></w:r> 
</w:p> 

评论:我不知道输出应该是什么样子,因为我不是XML大师;如果我知道我可能会自己写这个。所以只要它能工作,XML就可以看起来像它喜欢的一样。通过作品我的意思是,它显示我想要的方式<code>块。我希望代码块的显示与<mtext> XML节点中显示的完全一致,并附有新行和所有内容。在这种情况下,精确的输出(一次已经与Word中打开)显示如下:

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

注意,特殊字符正确显示和换行符都存在。问题在于<w:t>元素在一行中显示所有内容,这是我不想要的,但不知道还有什么要使用。

+1

请编辑问题并提供您想要的确切转换结果。 –

+0

@Administrator,你需要用你期待的“RESULT XML”来更新你的问题!虽然你不能实现你想要的东西......“手动输入你想要输出的东西”,这样可以让我们更容易理解问题,而不是通过复杂的线条来读取。 –

+0

我已经更新了回答。因为我不知道XML应该是什么样子,所以我提前申请了,但这就是我问这个问题的原因。谢谢 – administrator

回答

1

在xsl:output,template,element或value-of lvl上使用xml:space来保存换行符/空格。

+0

嗨,这不适用于w:t元素,所以我需要一个不同的解决方案。也许不使用w:t元素的那个? – administrator

+0

使用位于顶部的xsl:output xml:space =“preserve”为那些? –

+0

嗨,是的,我也尝试过没有改变;新行仍然没有显示 – administrator