1

我有一个返回类似于下面的 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 声明不同的(空白)命名空间?

4

1 回答 1

1

您可以执行以下操作。因为所有全局元素 ( and都将是命名空间限定的,而所有本地元素 ( elementFormDefaultand )都不会。unqualifiedBalanceResponseBalanceResultBalanceamount

<?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 模式中设置elementFormDefault为,qualified那么它会期望所有 XML 元素都是命名空间限定的。

于 2013-08-07T13:08:15.657 回答