我试图通过maven JAXB插件生成POJO来解析我得到的XML。我的XML中有一个根级元素,它的命名空间与其中的其他元素不同。以下是XML:
<?xml version="1.0" encoding="UTF-8"?>
<skuFlatFileType xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd" xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<FlattenedSKU>
<ns0:SKU></ns0:SKU>
</FlattenedSKU>
</skuFlatFileType>
由于 FlattenedSKU 和 SKU 位于不同的命名空间中。所以我为FlattenedSKU下的所有元素声明了一个单独的XSD,然后将其导入到父元素中。 XSD看起来像这样:
sku_wrapper.xsd
<xs:schema
xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
targetNamespace="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<xs:import namespace="http://www.xyz/schemas/dbm/product/V1"
schemaLocation="sku.xsd" />
<xs:element name="FlattenedSKU">
<xs:complexType>
<xs:sequence>
<xs:element name="SKU" type="ns0:SKU"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
子xsd如下:
sku.xsd
<xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified"
xmlns="http://www.xyz/schemas/dbm/product/V1"
targetNamespace="http://www.xyz/schemas/dbm/product/V1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SKU">
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:schema>
现在生成的java类看起来像这样:
@XmlRootElement(name = "FlattenedSKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd")
public class FlattenedSKU {
@XmlElement(name = "SKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd", required = true)
protected SKU sku;
但我需要的是:
@XmlRootElement(name = "FlattenedSKU", namespace = "http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd")
public class FlattenedSKU {
@XmlElement(name = "SKU", namespace = "http://www.xyz/schemas/dbm/product/V1", required = true)
protected SKU sku;
有人可以告诉我我做错了吗?
答案 0 :(得分:1)
除了我的评论,你要做的是&#34;参考&#34;到sku.xsd
中的元素,而不是在sku_wrapper.xsd
以下内容适用于您:
sku.xsd
<xs:schema attributeFormDefault="qualified"
elementFormDefault="qualified"
xmlns="http://www.xyz/schemas/dbm/product/V1"
targetNamespace="http://www.xyz/schemas/dbm/product/V1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SKU">
<xs:sequence>
</xs:sequence>
</xs:complexType>
<xs:element name="SKU" type="SKU"/>
</xs:schema>
请注意,更改是此处元素的声明。
<强> sku_wrapper.xsd 强>
<xs:schema
xmlns="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
targetNamespace="http://www.abc/schemas/xyz/sdf/Schemas/Schema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:ns0="http://www.xyz/schemas/dbm/product/V1">
<xs:import namespace="http://ww
w.xyz/schemas/dbm/product/V1"
schemaLocation="sku.xsd" />
<xs:element name="FlattenedSKU">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns0:SKU"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
注意元素的引用