2010-07-14 74 views
5

我有一個問題。如何將參數傳遞給XSLT?

我有一個XML文件,其中包含有關100個課程的信息。

我有一個很好地顯示100個課程列表的XSL文件。

但是,如果我只想顯示1道菜,該怎麼辦。我可以傳遞一個參數給XSLT文件,告訴它只顯示「ENGL 100」嗎?

的XML看起來是這樣的:

<document> 
<menu> 
    <item> 
     <name>MTH 300</name> 
     <brief>Mathematics Skill Development</brief> 
     <description>A course in the fundamentals of ...</description> 
    </item> 
    <item> 
     <name>MTH 301</name> 
     <brief>Basic Algebra</brief> 
     <description>An introduction to algebra, ...</description> 
    </item> 
... 

我知道我可以通過XML編寫名爲「eng100.xsl」 XSLT文件中循環,並只顯示ENG 100,但我不希望有寫幾十個這些文件。

XML是動態的,我可以控制它。我希望XSLT文件是靜態的,永遠不會改變。

有什麼辦法可以將參數傳遞給XSLT嗎?

+1

請注意,答案部分取決於您使用的XSLT引擎以及您如何調用它。 – 2010-07-15 05:54:36

回答

6

您可以將參數傳遞給XSLT,這取決於您的XSLT處理器,但通常作爲附加命令參數(如果它是命令行處理器的話)。

您使用

<xsl:param name="courseName" select"initialValue"/> 

然後,您可以測試您的XSLT此參數,並調用取決於它的價值不同的模板聲明的參數。例如,如果參數爲空,則調用處理所有元素的當前模板,否則調用僅當項目名稱等於參數值時處理元素的模板。您可以使用測試

<xsl:template match="item"> 
     <xsl:if test="$courseName=name(./name)"> 
     <xsl:call-template name="yourOriginalTemplate"/> 
     </xsl:if> 
    </xsl:template> 

但是通過過濾和格式,你是在一個文件中混合兩種顧慮做到這一點。我將從格式中分離出對XML元素的選擇 - 爲此提供兩個xslt文件並將它們作爲管道運行。

+0

很好的答案。 +1。 – 2010-07-14 23:20:06

+0

此外,對於某些場景,您可以使用「元數據」輸入文檔來驅動轉換並使用document()函數訪問「數據」文檔。這會降低效率。 – 2010-07-14 23:30:11

+3

如果xml文檔具有處理指令<?xml-stylesheet type =「text/xsl」href =「mytransformation.xsl」?>如果可以通過url編碼的name = value將xsl參數傳遞給xml文件參數?我的意思是,我可以這樣做:mycontent.xml?courseName = MTH300 – brighty 2013-12-03 14:17:28