1

以下は私が使用しなければならないxmlです:

<watermarks identifier="X" hostname="X">
   <watermark type="XX" value="1234"/>
   <watermark type="YY" value="1234" />
</watermarks>

新しいWatermarksクラスを作成せずに、JAXBを使用してWatermarkオブジェクトのリストを取得したいだけです。透かしオブジェクトのリストを含む透かしクラスを作成することは可能ですか、それとも行う必要がありますか?

ありがとう。

4

1 に答える 1

0

StAX(JSR-173) を使用してXMLドキュメントを解析できます( XMLStreamReaderJavaSE6以降の実装はJDK/JREに含まれています)。次に、それを進めて各watermark要素に進み、 JAXB(JSR-222)にそれをアンマーシャリングさせることができます。

デモ

Watermarkクラスに注釈が付けられていると仮定すると@XmlRootElement、次のことができます。

import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Watermark.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();

        StreamSource source = new StreamSource("input.xml");
        XMLInputFactory xif = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xif.createXMLStreamReader(source);
        xsr.nextTag(); // Advance to "watermarks" element
        xsr.nextTag(); // Advance to "watermark" element

        while(xsr.getLocalName().equals("watermark")) {
             Watermark object = (Watermark) unmarshaller.unmarshal(xsr);
             System.out.println(object);
             xsr.nextTag();
        }
    }

}

完全な例

ジェネリックリストラッパークラス

以下の質問に対する私の回答では、役立つと思われる汎用リストラッパークラスの例を示しました。

于 2012-09-14T20:21:54.767 に答える