1

JAXB のマーシャリングに問題があり、その理由がよくわかりません。データをマーシャリングして xml ファイルに追加すると、先頭に XML コーディングがインポートされることを除いて、すべて問題ありません。

前の例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlightDetails xmlns="http://xml.netbeans.org/schema/Shows">
    <FlightDetailsCollection>
        <DestinationCity>France</DestinationCity>
        <ExtraInfo>Free Wifi</ExtraInfo>
        <Date>2009-03-09</Date>
        <Fare>
            <CurrencyName>GBP</CurrencyName>
            <CurrencyFare>60.0</CurrencyFare>
        </Fare>
    </FlightDetailsCollection>
</FlightDetails>

次に、マーシャリングされたデータを追加すると、次のように表示されます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlightDetails xmlns="http://xml.netbeans.org/schema/Shows">
    <FlightDetailsCollection>
        <OriginCity>London</OriginCity>
        <DestinationCity>France</DestinationCity>
        <AirlineBrand>Ryan Air</AirlineBrand>
        <ExtraInfo>Free Wifi</ExtraInfo>
        <Date>2009-03-09</Date>
        <Fare>
            <CurrencyName>GBP</CurrencyName>
            <CurrencyFare>60.0</CurrencyFare>
        </Fare>
    </FlightDetailsCollection>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlightDetails xmlns="http://xml.netbeans.org/schema/Shows">
    <FlightDetailsCollection>
        <OriginCity>Germany</OriginCity>
        <DestinationCity>France</DestinationCity>
        <AirlineBrand>Virgin Air</AirlineBrand>
        <Date>2009-03-09</Date>
        <Fare>
            <CurrencyName>GBP</CurrencyName>
            <CurrencyFare>200.0</CurrencyFare>
        </Fare>
    </FlightDetailsCollection>
</FlightDetails>

ご覧のとおり、XML ファイルに入れる前に次のものが追加されています。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlightDetails xmlns="http://xml.netbeans.org/schema/Shows">

エンコーディングとスキーマ名が含まれないようにするにはどうすればよいですか? デバッグでは、必要な情報のみが含まれているように見えるため、追跡できません。JAXBが追加したと思いますが、間違っている可能性があります。

どうもありがとう、

4

2 に答える 2

2

XML宣言を省略するには、次のようにします。

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

StAXXMLStreamWriterを作成して出力をラップし、名前空間宣言の管理とルート要素の追加に役立つものにマーシャリングを続けます。

于 2013-01-12T13:33:51.290 に答える
1

2番目の例から、いくつかの異なるオブジェクトを順番に同じ出力ストリーム(またはライターなど)にマーシャリングしようとしているように見えます。XML 宣言を抑制できたとしても、結果のファイルには複数のルート要素が含まれるため、整形式の XML にはなりません。より良いアプローチは、<FlightDetails>複数の<FlightDetailsCollection>要素を含むものを目指すことです。それをどのように実現するかは、JAXB クラスの詳細によって異なります。

于 2013-01-12T15:03:56.513 に答える