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

从您的第二个示例看来,您正试图将几个不同的对象按顺序编组到同一个输出流(或编写器,或其他)。即使您可以禁止 XML 声明,这也不会产生格式良好的 XML,因为结果文件将具有多个根元素,更好的方法是针对<FlightDetails>包含多个<FlightDetailsCollection>元素的文件。具体如何实现这取决于您的 JAXB 类的详细信息。

于 2013-01-12T15:03:56.513 回答