Я использую XPath 1.0 для обработки входящих сообщений веб-служб. Это может быть довольно сложно сделать правильно, если используются типы данных схемы , потому что XPath 1.0 не распознает их (XPath 2.0 делает, но, похоже, нет полной реализации с открытым исходным кодом. Не уверен, если Saxon-B делает это).
Например, литералы "true" и "false" в логическом xs: boolean представляют логические значения True и False в соответствии со схемой xml, но XPath 1.0 оценивает оба из них как True.
Это означает, что оценка /test
против <test>false</test>
фактически возвращает True.
То же самое относится и к другим типам данных: «12.78e-2» является допустимым значением для xs: double, но оценивается как Double.NaN.
javax.xml.datatype
содержит сопоставления типов для duration и dateTime, но это все.
XMLBeans содержит простые в использовании конвертеры между встроенными типами данных Java и схемы:
Node n = jaxp13XPathTemplate.evaluateAsNode(expression, context);
boolean b = XmlBoolean.Factory.parse(n).getBooleanValue();
Существуют ли другие инструменты, которые могут быть полезны (и нет, я не ищу полноценную структуру связывания XML)?