我有一个远程系统,它返回类似于下面的 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
是非限定
,所有全局元素(BalanceResponse
和 BalanceResult
都将是命名空间限定的,而所有本地元素(Balance
和 amount
)则不会。
<?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/