XPath 1.0を使用して受信 Web サービス メッセージを処理しています。XPath 1.0 はそれらを認識しないため、スキーマ データ型が使用されている場合、これを正しく行うのは非常に困難です(XPath 2.0 は認識しますが、完全なオープン ソース実装はないようです。Saxon-Bがこれを行うかどうかは不明です)。
たとえば、xs:boolean のリテラル "true" と "false" は、xml スキーマに従ってブール値の True と False を表しますが、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 バインディング フレームワークを探しているわけではありません)。