使用 JAXB 处理 null 和空字符串值

时间:2021-02-04 14:41:20

标签: java xml xsd jaxb

我正在使用从架构生成的 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>

0 个答案:

没有答案