Булевы выражения в операторах выбора XSLT - PullRequest
2 голосов
/ 02 августа 2010

У меня есть следующий код 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 ]

1 голос
/ 03 августа 2010

По моему опыту, исключение по умолчанию, генерируемое XSLT в Java, не очень полезно. Вам нужно будет реализовать экземпляр ErrorListener и использовать его методы для захвата и сообщения о настоящей проблеме XSLT. Вы можете прикрепить это ErrorListener, используя setErrorListener метод вашего TransformerFactory.

0 голосов
/ 06 августа 2010

Я бы очень рекомендовал любому писать сложные выражения - на любом языке!

Это вообще не вопрос XSLT.Это общий вопрос программирования, и ответ на него таков:

Никогда не пишите слишком сложные выражения , потому что им сложно писать, читать, проверять, проверять, проверять, изменять.

Разделить сложное выражение на несколько простых выражений и назначить их различным переменным .Затем оперируйте этими переменными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...