0

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.datatypeduration と dateTime の型マッピングが含まれていますが、それだけです。

XMLBeansには、Java とスキーマの組み込みデータ型の間の使いやすいコンバーターが含まれています。

Node n = jaxp13XPathTemplate.evaluateAsNode(expression, context);
boolean b = XmlBoolean.Factory.parse(n).getBooleanValue();

他に役立つツールはありますか (いいえ、本格的な XML バインディング フレームワークを探しているわけではありません)。

4

1 に答える 1

0

本格的なバインディング フレームワークは必要ないとおっしゃいましたが、jibx はご覧になりましたか。バインディング ファイルを作成するのは少し面倒かもしれませんが、XML スキーマからバインディングを生成することはできます。

XPath を使用する代わりに、xml を dom に解析して操作できるようにすることを検討しましたか?

カール

于 2009-03-12T19:47:12.643 に答える