3

Java オブジェクトと XML スキーマ (XSD) がある場合、そのオブジェクトを取得してスキーマに沿った xml ファイルに変換する最善の方法は何ですか。オブジェクトとスキーマはお互いを認識していません (Java クラスがスキーマから作成されていないため)。

たとえば、クラスには、xsd ファイルの「countTotal」という要素に対応する整数フィールド「totalCountValue」が存在する場合があります。「オブジェクトにintのtotalCountValueが含まれている場合、「countTotal」という要素を作成してXMLに入れる」というマッピングを作成する方法はありますか。同様に、無視する必要があるオブジェクト内のフィールドや、複数の XML 要素に対応する必要があるオブジェクト内のリストが存在する場合があります。

私は XStream を見ましたが、それを行う (明白な) 方法は見当たりませんでした。この作業を簡素化できる XML ライブラリは他にありますか?

4

7 に答える 7

6

これは、アノテーションを使用して JAXB 経由で実現できると思います。私は通常、スキーマに一致するように既存の Java オブジェクトをマップするよりも、XJC を使用して (スキーマで定義されているように) JAXB からオブジェクトを生成する方がはるかに簡単であることに気付きました。YMMV。

于 2008-11-04T18:13:17.707 に答える
4

XStream を使用してオブジェクトを XML シリアル化しています。このシリアライザーで何が「明白」だと思いませんか? コツをつかめば、とても簡単です。

あなたが提供した例では、次のようなものがあります:

...
XStream xstream = new XStream(new DomDriver());

xstream.alias("myclass", MyClass.class);
xstream.aliasField("countTotal", MyClass.class, "totalCountValue");

String xml = xstream.toXML(this);
...

このサンプル クラスの場合:

class MyClass {
     private int totalCountValue;

     public MyClass() {
     }
} 

これよりも単純または「クール」なシリアライザーを見つけた場合は、それを共有してください。私も変化を求めて…

ここでXStream ミニ チュートリアルを確認してください

于 2008-11-04T18:47:31.680 に答える
2

どのライブラリが自分のニーズに最も適しているかを確認するために、提案されたほとんどのライブラリを試しました。また、ここでは言及されていませんが、同僚から提案されたWoodstoxという StAX 実装のライブラリも試しました。

確かに、これらのライブラリのすべてに対して私のテストが完了したわけではありませんが、質問に記載されている目的のためには、Woodstox が最適であることがわかりました。マーシャリングでは最速です (私のテストでは、XStream を約 30 ~ 40% 上回っています)。また、使用と制御がかなり簡単です。

このアプローチの欠点は、作成された XML (私が定義したものであるため) がスキーマで正しいことを確認するためにバリデーターを実行する必要があることです。

于 2008-11-07T16:26:30.700 に答える
2

この作業には、JiBxという Java ライブラリを使用します。XML スキーマ要素を Java オブジェクトにマップする方法を記述するために、(XML で) マッピング ファイルを作成する必要があります。プロセスの自動化に役立つジェネレーター ツールがいくつかあります。さらに、それは本当に速いです。

于 2008-11-04T19:53:12.000 に答える
1

Betwixtと呼ばれるApacheCommonsのライブラリを使用できます。BeanをXMLにマップし、ラウンドトリップが必要な場合は元に戻すことができます。

于 2008-11-05T21:07:59.057 に答える
1

JDOMを見てください。

于 2008-11-05T21:16:13.453 に答える
0

JAXBまたはCastorと言えます。Castor の方が使いやすく、信頼性が高いことがわかりましたが、JAXB が標準です

于 2009-02-10T11:08:56.253 に答える