2012-12-04 15 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