提问人:Hernando Scheidl 提问时间:11/14/2023 更新时间:11/14/2023 访问量:34
如何在xjc生成的类中访问xs:anySimpleType元素的xsi:type属性?
How to access xsi:type attribute of a xs:anySimpleType element in xjc generated class?
问:
我需要封送和取消封送包含如下结构的 XML:
<Parameter>
<Name>Country</Name>
<Value xsi:type="xsd:string">Uruguay</Value>
</Parameter>
在以下架构片段中定义:
<xs:complexType name="Parameter">
<xs:sequence>
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Value" type="xs:anySimpleType"/>
</xs:sequence>
</xs:complexType>
为上述架构生成的带有 xjc 的类如下:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Parameter", propOrder = {
"name",
"value"
})
public class Parameter {
@XmlElement(name = "Name", required = true)
protected String name;
@XmlElement(name = "Value", required = true)
protected Object value;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
如您所见,元素中的属性在类中不存在。我需要将其作为业务需求进行访问。xsi:type
Value
Parameter
我尝试过像这样修改原始架构:
<xs:complexType name="ParameterValue">
<xs:simpleContent>
<xs:extension base="xs:anySimpleType">
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="Parameter">
<xs:sequence>
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Value" type="ParameterValue"/>
</xs:sequence>
</xs:complexType>
因此,类中的属性是同时包含类型和实际值的类型。这样我就有了类型的 getter,但类型和值现在是“解耦”的。我的意思是,在封送时,必须手动设置类型,而不是从值推断出来的。value
Parameter
ParameterValue
有没有更好的方法来处理 anySimpleType 元素?
答: 暂无答案
评论