2009-10-12 57 views
1

這是對我關於XSLT的previous question的回答。什麼工具鏈支持將節點集作爲參數傳遞給XSLT轉換?

回顧一下,我沒有意識到沒有EXSLT,XSLT不會讓你動態地創建一個帶有字符串值的xpath表達式。其中一個建議的解決方法之一是

查詢輸入文檔的DOM在執行前的轉換和傳遞節點設置到變換

我採用Apache Ant做改造,根據xslt/style任務的參數the manual

要置於參數中的文本值。最初打算成爲XSL表達式。

聽起來像Apache Ant不支持這一點。它讓我想知道,但是在一個支持這個工作的系統中,這個工作的語義如何呢?

那麼,什麼工具鏈或系統支持將源文檔中的節點集作爲參數傳遞給變換。例如代碼的獎勵點數。

+0

您只需要通過ant將參數傳遞給xslt,或者您想將構建文件的一部分作爲參數傳遞給xslt樣式表? – 2011-02-19 12:44:32

回答

0

無法在標準xslt 1.0中將節點集作爲參數傳遞。 爲此,您必須使用xslt 2.0解析器。

例如: http://wiki.apache.org/ant/UsingAntWithXSLT20AndSaxon

+0

節點集是XSLT/XPath 1.0的有效數據類型,您可以將它們作爲參數傳遞。怎麼做?它取決於XSLT處理器。 – 2011-02-20 23:42:56

0

我不能完全肯定我的答案,因爲我似乎不能正確理解你的問題,但立足您引用線程和你的報價上,我可以拿出提出以下建議:

的build.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<project name="Test XSLT" default="test-xslt" basedir="."> 
    <target name="test-xslt"> 
     <xslt in="test.xml" style="ant-with-param.xsl" out="ant-with-param-out.xml"> 
      <param name="param-set-id" expression="2"/> 
     </xslt> 
    </target> 
</project> 

的test.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<params> 
    <set id="1"> 
     <param name="name" value="Name from the first set"/> 
    </set> 
    <set id="2"> 
     <param name="name" value="Name from the second set"/> 
    </set> 
</params> 

螞蟻與 - param.xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:exsl="http://exslt.org/common" 
       extension-element-prefixes="exsl"> 
    <xsl:param name="param-set-id"/> 
    <xsl:variable name="param-set" select="//params/set[@id = $param-set-id]"/> 

    <xsl:template match="/"> 
     <name> 
      <xsl:value-of select="exsl:node-set($param-set)//param[@name = 'name']/@value"/> 
     </name> 
    </xsl:template> 
</xsl:stylesheet> 

輸出

<?xml version="1.0" encoding="UTF-8"?> 
<name>Name from the second set</name> 

鑑於樣式表上讀取的值從輸入文檔築底參數從構建文件傳遞的變量。藉助源文檔中的XPath表達式獲取參數,稍後在exsl:node-set()擴展功能的幫助下使用。默認情況下,ant使用Xalan作爲xslt處理器。其擴展名的完整列表可在project's home page找到。