在架构定义中创建具有空命名空间的嵌套元素

时间:2013-08-07 12:59:11

标签: java xml jaxb xsd

我有一个远程系统,它返回类似于下面的XML。

<BalanceResponse xmlns="http://example.com/balance">
  <BalanceResult>
    <Balance xmlns="">
      <amount>10</amount>
    <Balance>
  </BalanceResult>
</BalanceResponse>

我创建了一个与之匹配的xsd

<s:schema elementFormDefault="qualified" targetNamespace="http://example.com/balance">
   <s:element name="BalanceResponse">
        <s:complexType> 
            <s:element minOccurs="0" maxOccurs="1" name="BalanceResult">
            <s:complexType> 
                      <s:element minOccurs="0" maxOccurs="1" name="Balance">
                         <s:complexType> 
                <s:element minOccurs="0" maxOccurs="1" name="amount" type="s:decimal" />
                          </s:complexType> 
                      </s:element>
                </s:complexType>
            </s:element>
        </s:complexType>
</s:schema>

我使用JAXB生成存根类。但是,我知道我的(un /)marshaller无法绑定Balance元素,因为命名空间不同。

问题是,如何为我的元素Balance声明一个不同的(空白)命名空间?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作。由于elementFormDefaultunqualified,所有全局元素(BalanceResponseBalanceResult都将符合命名空间,并且所有本地元素(Balanceamount)都赢了是的。

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://example.com/balance" 
    xmlns:tns="http://example.com/balance" 
    elementFormDefault="unqualified">

    <element name="BalanceResponse">
        <complexType>
            <sequence>
                <element ref="tns:BalanceResult"/>
            </sequence>
        </complexType>
    </element>

    <element name="BalanceResult">
        <complexType>
            <sequence>
                <element name="Balance">
                    <complexType>
                        <sequence>
                            <element name="amount" type="int"/>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>

</schema>

如果在您的问题中的XML Schema中将elementFormDefault作为qualified,那么它会期望所有XML元素都是名称空间限定的。