2015-07-25 4 views
0

В моем проекте использовался Saxon 9.0.0.2. Я пытаюсь перейти на Saxon-HE 9.6.0-6.Оценка выражения xpath 1.0 с Saxon-HE 9.6.0-6

XPathEvaluator#setBackwardsCompatible(boolean) 

Этот метод больше не существует в 9.6.0-6. я прокомментировал эту строку в своем коде, но при запуске я получаю следующее сообщение об ошибке:

net.sf.saxon.trans.XPathException: A sequence of more than one item is not allowed as the first argument of name() (<xs:element/>, <xs:element/>, ...) 
at net.sf.saxon.expr.Expression.typeError(Expression.java:1123) 
at net.sf.saxon.expr.CardinalityChecker.evaluateItem(CardinalityChecker.java:295) 
at net.sf.saxon.functions.NameFn.evaluateItem(NameFn.java:52) 
at net.sf.saxon.functions.NameFn.evaluateItem(NameFn.java:23) 
at net.sf.saxon.expr.Expression.iterate(Expression.java:448) 
at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:192) 
at net.sf.saxon.xpath.XPathEvaluator.evaluate(XPathEvaluator.java:239) 
at jlibs.examples.xml.sax.dog.engines.SaxonEngine.evaluate(SaxonEngine.java:72) 
at jlibs.examples.xml.sax.dog.TestCase.usingDOM(TestCase.java:71) 
at jlibs.examples.xml.sax.dog.tests.XPathConformanceTest.run(XPathConformanceTest.java:44) 
at jlibs.examples.xml.sax.dog.tests.XPathConformanceTest.main(XPathConformanceTest.java:73) 

выглядит, если name функция бросает это, когда аргумент содержит последовательность из более чем одного элемента.

б/у товар хорошо подходит. Как заставить его работать без изменения моих xpaths.

ответ

1

Saxon теперь предлагает два API для оценки XPath: API JAXP и API s9api. Внедрение Saxon API JAXP переместилось как можно ближе к спецификации JAXP, включая удаление расширений, таких как метод setBackwardsCompatible(). Однако XPathEvaluator позволяет вам получить доступ к StaticContext с помощью getStaticContext(), и у него есть опция setBackwardsCompatibilityMode(), которая должна восстановить старое поведение.

В качестве альтернативы существует также метод setBackwardsCompatible() в классе s9api XPathCompiler.

Если вы хотите воспользоваться XPath 2.0, вы, вероятно, захотите перейти на интерфейс s9api, поскольку JAXP не поддерживает более богатую систему типов XPath 2.0.

+0

спасибо. это сработало; –

Смежные вопросы