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

标签 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 生成 stub 类。但是,我知道我的 (un/) 编码器无法绑定(bind) Balance 元素,因为命名空间不同。

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

最佳答案

您可以执行以下操作。由于 elementFormDefault非限定,所有全局元素(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 架构中将 elementFormDefault 设置为 qualified,那么它会期望所有 XML 元素都是命名空间限定的。

关于java - 在架构定义中创建具有空白命名空间的嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104061/

相关文章:

具有属性和值的 JAXB XMLElementWrapper

java - 将字段编码为具有字段名称的子节点的值属性

xml - JAXB XML 解码器

java - Google App Engine 数据存储区 api 接受事务作为参数

xml - 如何使用 Scala 创建 xhtml 查询字符串?

java - 在java中,为什么我可以声明一个名为 "a"的变量,但不能声明一个名为 "1"的变量?

java - 使用java向远程服务发送xml请求

python - 从 XML 注释转换为 BRAT 格式

java - 嵌套 if 与 if 与双符号?

java - Thread.currentThread() 在多核/多处理器系统上的语义?