2010-08-02 113 views
2

我有以下XSLT代碼,幾乎做什麼,我想:布爾表達式

<xsl:variable name="scoredItems" 
       select= 
        ".//item/attributes/scored[@value='true'] | 
        self::section[attributes/variable_name/@value='SCORE']/item | 
        .//item//variables//variable_name"/> 

我想這換一個更復雜的布爾表達式:

<xsl:variable name="scoredItems" 
       select= 
        ".//item/attributes/scored[@value='true'] or 
        (self::section[variable_name/@value='SCORE']/item and 
        (not (.//item/attributes/scored[@value='false']))) or 
        .//item//variables//variable_name"/> 

然而,當我運行這個,我得到以下錯誤:

javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet  
at org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:832)  
at org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:618) 

如何解決這個問題? (請注意,我使用的是XSLT 1.0。)

+0

問題是什麼?你嘗試過什麼不起作用?你收到什麼錯誤信息? – 2010-08-02 15:54:14

+0

有問題嗎? XPath表達式在語法上似乎是正確的。 – 2010-08-02 15:56:51

回答

1

根據我的經驗,XSLT在Java中引發的默認異常並不很有幫助。您需要實現ErrorListener的實例並使用它的方法來捕獲和報告真正的XSLT問題。您可以使用您的TransformerFactorysetErrorListener方法附加此ErrorListener

0

我會大大阻止任何人寫任何語言的複雜表達式 - 用任何語言!

這不是一個XSLT問題。這是一個普遍的編程問題,答案是:

永遠不要寫太複雜的表達式,因爲他們很難寫入,讀取,測試,驗證,證明,改變。

將一個複雜的表達式分解成多個更簡單的表達式,並將它們分配給不同的變量。然後對這些變量進行操作。