我有下面的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