3

おそらく、このような質問がなされたのでしょう。XML から Java クラスへの変換は初めてです。私はこのようなxmlを持っています:

<Root>
    <Book name="harel" price="5" />
    <Book name="xml" price="9" />
</Root>

このような構造に対して Java クラスを動的に生成する方法はありますか? 小さな修正、xml の xsd がありません

4

5 に答える 5

6

注: 私はEclipseLink JAXB(MOXy)のリーダーであり、JAXB(JSR-222)エキスパートグループのメンバーです。

このような構造のJavaクラスを動的に生成する方法はありますか?

JAXB実装は、XMLスキーマからJavaモデルを生成する機能を提供します。Java SE 6以降のJDKに含まれているリファレンス実装は、次の場所で入手できます。

<JAVA_HOME>/bin/xjc

XMLスキーマからオブジェクトモデルを生成する例は、次の場所にあります。

ちょっとした修正ですが、xml用のxsdがありません

XMLスキーマがない場合は、XMLドキュメントからXMLスキーマを生成するユーティリティを見つけることができます。

または、コードから始めます。


コードから開始

コードから始めて、モデルに注釈を付けて、既存のXML構造にマップすることもできます。

package forum11213872;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement(name="Root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElement(name="Book")
    private List<Book> books;

}

package forum11213872;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class Book {

    @XmlAttribute
    private String name;

    @XmlAttribute
    private int price;

}

デモ

package forum11213872;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

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

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11213872/input.xml");
        Root root = (Root) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}

input.xml / Output

<Root>
    <Book name="harel" price="5" />
    <Book name="xml" price="9" />
</Root>
于 2012-06-26T18:45:25.563 に答える
3

はい、castor フレームワーク (http://www.castor.org/) または jaxb (http://www.oracle.com/technetwork/articles/javase/index-140168.html) を参照してください。

于 2012-06-26T18:38:48.700 に答える
2

Java Castor を試してみてください。xsd を指定してオブジェクトに変換できます。Eclipse 用のプラグインもあります。

http://www.castor.org/

于 2012-06-26T18:39:27.607 に答える
1

JAXBを使用します。これは現在JavaSEに含まれており、XJCを使用してXSDからクラスを生成できます。ただし、XMLの構造が実行時までわからないため、本当に動的に意味する場合は、JDOMのようなものを使用する必要があります。

于 2012-06-26T18:48:43.550 に答える
1

XStreamを見てください。

XML と Java の間、および Java と XML の間の変換を行います。

于 2012-06-26T18:40:35.097 に答える