Jaxb unmarshalling(xml到object)和编组(对象到xml),然后xmls略有不同

时间:2014-02-27 14:26:30

标签: jaxb marshalling unmarshalling

使用JAXB,我尝试了解组(xml到对象)和编组(对象到xml)。我注意到xml格式有细微的差别,虽然我觉得技术上两者都是一样的。

  

原始xml如下所示:

<?xml version="1.0"?>
<Sites>
<Site id="101" name="NY-01" location="New York" xmlns="http://example.ipsoft.com/coding.xsd">
    <Hosts>
        <Host id="1001">
           <Host_Name>srv001001</Host_Name>
           <IP_address>10.1.2.3</IP_address>
           <OS>Windows</OS>
           <Load_avg_1min>1.3</Load_avg_1min>
           <Load_avg_5min>2.5</Load_avg_5min>
           <Load_avg_15min>1.2</Load_avg_15min>
        </Host>

    </Hosts>
</Site>
</Sites>
  

将对象编组到xml后,输出如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Sites xmlns:ns2="http://example.ipsoft.com/coding.xsd">
    <ns2:Site location="New York" name="NY-01" id="101">
        <ns2:Hosts>
            <ns2:Host id="1001">
                <ns2:Host_Name>srv001001</ns2:Host_Name>
                <ns2:IP_address>10.1.2.3</ns2:IP_address>
                <ns2:OS>Windows</ns2:OS>
                <ns2:Load_avg_1min>1.3</ns2:Load_avg_1min>
                <ns2:Load_avg_5min>2.5</ns2:Load_avg_5min>
                <ns2:Load_avg_15min>1.2</ns2:Load_avg_15min>
            </ns2:Host>

</Sites>

如何使输入源xml和最终输出都相同?

1 个答案:

答案 0 :(得分:0)

文档XML文档具有相同的命名空间限定。

当JAXB声明默认名称时

当您指定以下包级别@XmlSchema注释时,JAXB实现通常会使用默认命名空间:

@XmlSchema(
    namespace = "http://example.ipsoft.com/coding.xsd"",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

为什么JAXB没有在这里使用默认命名空间

在您的XML文档中,并非所有XML元素都是名称空间限定的(Site是,但Sites不是),因此JAXB不保存任何前缀来表示没有名称空间而不是默认名称空间。

<Sites>
    <Site id="101" name="NY-01" location="New York" xmlns="http://example.ipsoft.com/coding.xsd">