2

JAXB 2.0でXMLドキュメントを処理しています。ここでは、Javaオブジェクトにマップされた情報(私の例では「id」)が必要であり、でいくつかのビジネスロジックを実行しています。ここではすべてが正常に機能します。

ただし、これらのXMLドキュメントには、元のxml形式でデータベースに保存したい約500のノードのコレクションが常に保持されているため、文字列形式のXMLに関心があります。私の意見では、これらのノードをJavaオブジェクトにアンマーシャリングし、後で再度XMLにマーシャリングしてデータベースに保存することは意味がありません。

プロパティに注釈を付けて、XMLノード全体を文字列として保持する方法はありますか?そのクラスの現在のバージョンは次のとおりです。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Parent {

    @XmlElement(name = "id")
    public long id;

    @XmlElement(name = "child", type = String.class)
    @XmlElementWrapper(name = "children")
    public List<String> children = new ArrayList<String>();

}

XMLドキュメントをアンマーシャリングした後、children.size()は正しい数のchildranを返しますが、それでもnullです。

XMLドキュメントは次のようになります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parent>
    <id>45</id>
    <children>
        <child>
            <name>Crash Dummy</name>
            <age>21</age>
        </child>
        <child>
            <name>Rockstar Programmer</name>
            <age>12</age>
        </child>
    </children>
</parent>

すべてのヒントまたは可能な解決策を事前に感謝します。

4

1 に答える 1

2

いいえ、JAXBはこのようなものを許可していません(私が知っている他のツリーベースのXML APIも許可していません)。

ただし、ドキュメント全体を解析するためのオーバーヘッドがそれほど悪くなるとは思いません。結局のところ、静的ノードツリーがどこから始まりどこで終わるかを見つけるために、とにかくドキュメントを解析する必要があります。ノードツリーをJAXBノードとして格納することは、大きなBLOBに格納することよりもそれほど悪くはありません。

パフォーマンスが本当に重要な場合は、次の2つの方法をお勧めします。

  • StAXなどのより高速なAP​​Iを使用してXMLドキュメントを解析します(ただし、低レベルのAPIでパーサーを正しく取得するのは非常に難しい場合があります)
  • データを2つのXMLファイルとして保存します。1つは実際に必要なデータを含み、もう1つは持ち運びが必要な「静的」データを含みます。最終的なドキュメントで何をするかに応じて、XIncludeのようなものを使用することもできます。
于 2010-02-04T16:28:28.463 に答える