2010-10-27 23 views
4

我有一堆用於生成HTML頁面的XML文件。這些頁面最終通過一些<%= %>標籤(用手)標記並製作成Ruby .erb模板。如何使用XSLT創建PHP/JSP/ERB標籤?

有沒有辦法在XSL轉換過程中直接生成特殊標籤<?php ?><%= %>

我使用<![CDATA[ ... ]]>塊試過,但隨後的輸出與&lt;&gt;代替<>生成。

+0

好問題,1。請參閱我的答案以獲得解釋,以及如何完成此操作的完整示例。 – 2010-10-27 13:42:13

回答

4
Is there a way to generate the special tags <?php ?> or <%= %> directly during the XSL transform? 

<?php ?>不是一個「特殊標記」 - 這是在XPath數據模型標準的節點類型 - 一個processing instruction

還有一個XSLT指令創建PI:

<xsl:processing-instruction>

最後,你可以創建一個像文本 「<%=%>」,如果你使用文本輸出方法:

<xsl:output method="text"/> 

但是在文字輸出法丟失任何節點 - 您應該輸入每個輸出字符作爲文本。

因此,它是更方便一點位使用默認XML輸出方法和(非強制性!)屬性disable-output-escaping="yes",如果這是你的XSLT處理器支持。

下面是一個例子

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 

<xsl:template match="/"> 
    <xsl:processing-instruction name="php"/> 
    <xsl:text disable-output-escaping="yes"> 
    &lt;% Hello World! %> 
    </xsl:text> 
</xsl:template> 
</xsl:stylesheet> 

應用這種變換以任何XML文檔(未使用)產生

<?php?> 
    <% Hello World! %> 
+0

+1非常完整的答案! – 2010-10-27 15:06:08

+0

非常好,謝謝,這是訣竅!我正在使用Javascript來轉換'ActiveXObject(「Microsoft.XMLDOM」)''和ActiveXObject(「Scripting.FileSystemObject」),它似乎支持'disable-output-escaping =「yes」'指令。 :) – Dave 2010-10-27 17:59:33

+0

@Dave:不客氣。 :) – 2010-10-27 18:07:44