使用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和最终输出都相同?
答案 0 :(得分:0)
文档XML文档具有相同的命名空间限定。
当您指定以下包级别@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;
在您的XML文档中,并非所有XML元素都是名称空间限定的(Site
是,但Sites
不是),因此JAXB不保存任何前缀来表示没有名称空间而不是默认名称空间。
<Sites>
<Site id="101" name="NY-01" location="New York" xmlns="http://example.ipsoft.com/coding.xsd">