我有一个远程系统,它返回类似于下面的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声明一个不同的(空白)命名空间?
答案 0 :(得分:1)
您可以执行以下操作。由于elementFormDefault
为unqualified
,所有全局元素(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 Schema中将elementFormDefault
作为qualified
,那么它会期望所有XML元素都是名称空间限定的。