我有以下几乎完全符合我要求的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 :(得分:1)
根据我的经验,XSLT在Java中抛出的默认异常不是很有用。您需要实现ErrorListener
的实例并使用其方法捕获并报告真正的XSLT问题。您可以使用ErrorListener
的{{1}}方法附加此setErrorListener
。
答案 1 :(得分:0)
我会极力阻止任何人用任何语言编写复杂的表达方式!
这根本不是XSLT问题。这是一个通用的编程问题,答案是:
永远不要写太复杂的表达,因为它们在编写,阅读,测试,验证,校对,更改方面具有挑战性。
将复杂的表达式拆分为多个更简单的表达式,并将它们分配给不同的变量。然后对这些变量进行操作。