1 имеет тип int.
1> 0 имеет тип boolean.
^ означает XOR; и вы не можете XOR boolean и int.
Другими словами: первое выражение «1» оценивается как число; второе выражение "1> 0" оценивается как логическая логика. Причиной этого является оператор предопределения .
Проблема в том, что, хотя Saxon добавлен в путь к классам, механизм JAXP по умолчанию для определения того, какой TransformerFactory используется, и он будет использовать значение по умолчанию - Xalan. Вам необходимо либо:
javax.xml.transform.TransformerFactory
на net.sf.saxon.TransformerFactoryImpl
, ] CLASSPATH
системная переменная или
внутри элемента xslt
Это руководство, кажется, дает пошаговые инструкции о том, как сделать то, что вы просите:
http://www.abbeyworkshop.com/howto/xslt/ant-saxon/index .html
Судя по всему, вы поступаете правильно. Вы уверены, что вам нужны двойные обратные косые черты?
Обновление: в документации xslt Ant упоминается свойство 'factory', которое может помочь вам приблизиться:
РЕДАКТИРОВАТЬ: Dr. Майкл Кей указал, что AntTransform больше не поддерживается и не рекомендуется.
Создайте taskdef из класса Saxon AntTransform :
<taskdef name="saxon-xslt" classname="net.sf.saxon.ant.AntTransform" classpath="${basedir}/lib/saxon/saxon9.jar;${basedir}/lib/saxon/saxon9-ant.jar"/>
<saxon-xslt
in="${source.xml}"
out="${out.dir}/${output.xml}"
style="${basedir}/${stylesheet.xsl}"
force="true">
</saxon-xslt>
Я начал использовать стандарт < xslt>
с saxon jar, указанным в
, но столкнулись с проблемами производительности. Казалось, немного "зависло" при вызове задачи. Я обнаружил, что добавление processor = "trax"
и указание
помогает ему работать намного быстрее.
<xslt in="${source.xml}"
out="${out.dir}/${output.xml}"
style="${basedir}/${stylesheet.xsl}"
processor="trax">
<factory name="net.sf.saxon.TransformerFactoryImpl"/>
<classpath refid="saxon-classpath" />
</xslt>