2013-02-22 85 views
0

我的XSL不帶參數的工作XSL解析問題的,每個標籤

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:param name="reportname" /> 
<xsl:param name="quarter" /> 
<xsl:param name="menteename" /> 

<xsl:template match="AllReports" > 
<xsl:for-each select="./Report[@Name=$reportname]" > 
    <table border="0" class="dottedlines" cellpadding="2" cellspacing="0"> 

    <xsl:for-each select="Record[@Period=$quarter] and ($menteename)] > 

<tr> 
    <xsl:for-each select="Entry"> 
<td><xsl:value-of select="." disable-output-escaping="yes"/></td> 
       </xsl:for-each> 
</tr> 

    </xsl:for-each> 
</table> 

    </xsl:for-each> 

    </xsl:template> 
</xsl:stylesheet> 

我的XSL與辛勤工作的編碼值

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:param name="reportname" /> 
<xsl:param name="quarter" /> 
<xsl:param name="menteename" /> 

<xsl:template match="AllReports" > 
<xsl:for-each select="./Report[@Name=$reportname]" > 
    <table border="0" class="dottedlines" cellpadding="2" cellspacing="0"> 

    <xsl:for-each select="Record[@Period=$quarter] and (Entry= 'Dhirde, Govinda' or Entry= 'Vaze, Kedar')] > 

<tr> 
    <xsl:for-each select="Entry"> 
<td><xsl:value-of select="." disable-output-escaping="yes"/></td> 
       </xsl:for-each> 
</tr> 

    </xsl:for-each> 
</table> 

    </xsl:for-each> 

    </xsl:template> 
</xsl:stylesheet> 

我傳遞變量$ menteename的值=「輸入= 'Dhirde,Govinda'或Entry ='Vaze,Kedar'「。但硬編碼的東西效果不是參數之一。我發現XSL解析存在一些問題,它讀取參數值中的標記。這是否導致問題。我該如何做這項工作?

+0

抱歉,上傳代碼我輸入了一個關閉']'額外。它不適用於並與 Govinda 2013-02-22 10:05:01

回答

0

嗯,我們真的需要知道哪種類型的參數值以及您將哪個值傳遞給樣式表,特別是當您的問題被標記爲xslt-2.0時,您應該有可能傳遞一個純字符串值一串字符串。

假設你在串序列'Dhirde, Govinda', 'Vaze, Kedar',你可以簡單地在你的謂語測試

Entry = $menteename 

通過。

如果您傳遞包含多個名稱的純字符串,那麼當然需要將字符串拆分爲單個值。由於這些值已經包含逗號,因此需要不同的分隔符。與傳遞的字符串值是'Dhirde, Govinda|Vaze, Kedar',您可以在您的謂詞中使用

Entry = tokenize($menteename, '\|') 

假設你使用XSLT 1.0和不能使用或不想使用擴展功能分裂參數的字符串值,你可以使用支票像

contains(concat('|', $menteename, '|'), concat('|', Entry, '|')) 

這是假設Entry元素包含像Vaze, Kedar這樣的單個值,並且您通過bar分隔的名稱列表,例如'Dhirde, Govinda|Vaze, Kedar'作爲參數值,那麼檢查是否

contains('|Dhirde, Govinda|Vaze, Kedar|', '|Vaze, Kedar|') 
+0

那麼我的建議是XPath/XSLT 2.0,您需要使用像Saxon 9或AltovaXML或XmlPrime這樣的XSLT 2.0處理器。這個錯誤信息聽起來好像你在只支持XSLT 1.0的Firefox這樣的Mozilla瀏覽器中使用XSLT。因此,您首先需要分別說明哪個XSLT處理器分別使用哪個XSLT版本。 – 2013-02-22 11:34:56

+0

我正在使用XSLT 1.0。你能幫我解決一下 – Govinda 2013-02-22 12:23:55

+0

對於XSLT 1.0,你有兩個選擇,如果你的XSLT處理器支持一個,或者使用像'contains(concat('|',$ menteename,'|')這樣的檢查,項)'。我將編輯我的帖子,並在帖子中顯示此評論。 – 2013-02-22 14:09:14

0

變量保存值,而不是表達式。您不能用值爲字符串「@x = 3」的變量替換表達式lilke(@x = 3)。爲了做到這一點,您需要一個擴展來評估以字符串形式提供的XPath表達式,例如saxon:evaluate()或XSLT 3.0 xsl:evaluate。