我正在使用从架构生成的 JAXB 类,但遇到了以下问题。我正在尝试使用单个元素处理 null 和空字符串值。
我想要实现的是能够编组空和空字符串值并在解组时接收相同的值。
Element("key1", "value1") -> <element key="key1">value1</element>
Element("key2", "") -> <element key="key2"/>
Element("key3", null) -> <element key="key3" xsi:nil="true"/>
架构 xsd:
<xs:element name="element" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="key" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
到目前为止,我得到以下结果,如果值为 null 或 "" 我得到相同的 xml:
Element("key1", null) -> <element key="key1"/> -> Element("key1", "")
Element("key2", "") -> <element key="key2"/> -> Element("key2", "")
知道这种 xml 结构是否可行吗?我唯一的想法是将结构更改为这样的东西,但它会生成更多无用的类来处理。
<element>
<key>key1</key>
<value>value1</value>
</element>
编辑
随着给定的架构更改,它按预期工作。原始结构是否可能的问题仍然存在。
<xs:element name="element">
<xs:complexType>
<xs:sequence>
<xs:element name="key" type="xs:string"/>
<xs:element name="value" type="xs:string" nillable="true"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<element>
<key>key1</key>
<value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</element>
<element>
<key>key2</key>
<value/>
</element>