XSLT select语句中的布尔表达式

时间:2010-08-02 15:51:15

标签: xslt

我有以下几乎完全符合我要求的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。)

2 个答案:

答案 0 :(得分:1)

根据我的经验,XSLT在Java中抛出的默认异常不是很有用。您需要实现ErrorListener的实例并使用其方法捕获并报告真正的XSLT问题。您可以使用ErrorListener的{​​{1}}方法附加此setErrorListener

答案 1 :(得分:0)

我会极力阻止任何人用任何语言编写复杂的表达方式!

这根本不是XSLT问题。这是一个通用的编程问题,答案是:

永远不要写太复杂的表达,因为它们在编写,阅读,测试,验证,校对,更改方面具有挑战性。

将复杂的表达式拆分为多个更简单的表达式,并将它们分配给不同的变量。然后对这些变量进行操作。