xml schema中如何定义Map类型

xml schema中没有map这种数据类型,因此只能够对Map进行模拟。首先定义Map中的item的类型

<xsd:complexType name=”StringMapItemType”>
<xsd:sequence>
<xsd:element name=”key” type=”xsd:string” />
<xsd:element name=”value” type=”xsd:string” />
</xsd:sequence>
</xsd:complexType>


然后定义使用该item的类型

<xsd:complexType name=”Opt”>
<xsd:sequence>
<xsd:element name=”optString” type=”tns:StringMapItemType”  minOccurs=”0″ maxOccurs=”unbounded” />
</xsd:complexType>


这样定义出了一个比较像Map<String, String>的类,一般的wsdl2java工具会把上述两个复杂类型转化为下面的类定义:

public class StringMapItemType {
protected String key;
protected String value;

}

public class Opt {
protected List<StringMapItemType> optString;

}


可以发现,生成的optString的定义并不是Map,而是一个List<StringMapItemType>类型。这个类型与Map已经比较接近了,主要的区别是Map<String, String>中,key是唯一的,而List<StringMapItemType>含有的item的可以具有相同的key。可以通过xsd:selector 和xsd:field 约束达到这一点。参考下面的定义:

<xsd:element name=”opt” type=”tns:Opt”>
<xsd:unique name=”optString”>
<xsd:selector xpath=”optString” />
<xsd:field xpath=”key” />
</xsd:unique>
</xsd:element>


上面的xml定义了一个名为opt的元素,其类型为tns:Opt,并通过xpath的定位到optString中所有元素的key值都是唯一的。这样我们就得到了一个比较像Map<String, String>的对象。虽然对数据的访问不如Map那么直接,但是也算基本达到了要求。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值