修改 XML 模式时如何管理 ItemChoiceType 枚举的更改?

Posted

技术标签:

【中文标题】修改 XML 模式时如何管理 ItemChoiceType 枚举的更改?【英文标题】:How to manage changes for the ItemChoiceType enum when revising XML schemas? 【发布时间】:2012-10-25 12:48:13 【问题描述】:

我们正在使用 XSD.EXE 从 XSD 模式生成运行时类以进行 XML 序列化。架构很大并且包含许多复杂的类型和选择元素。如http://msdn.microsoft.com/en-us/magazine/cc164135.aspx 中所述,选择元素会生成两个字段:保存值的 Item 字段和保存生成的枚举的 ItemChoiceType 字段,该枚举定义了 Item 字段中的命名元素。

XSD 为每个名为 ItemChoiceTypeXX 的元素名称字段创建一个唯一的枚举,其中 XX 是一个整数。 XSD 根据需要创建任意数量的 ItemChoiceTypes,并用递增的数字命名它们。

所以,我的架构的一小部分看起来像:

<xsd:choice>
  <xsd:element ref = "Sequence"/>
  <xsd:element ref = "HandshakeId"/>
</xsd:choice>

我可以像使用生成的类一样对其进行编码:

job.Item = "123";        
job.ItemElementName = ItemChoiceType26.Sequence;

问题是在最初生成的类中,该元素的 ItemChoiceType 是 ItemChoiceType26。更新架构并重新生成类后,名称现在是 ItemChoiceType27。

我的问题是,随着架构随着时间的推移不断更新和修订,我该如何管理它?我不控制 XSD 架构,它是由供应商提供的。但是,我必须更新我的代码以匹配他们所做的更改。随着时间的推移,我似乎面临着一场维护噩梦,希望有任何建议来更好地管理这个问题。

【问题讨论】:

【参考方案1】:

我认为正确的答案是使用 name 属性而不是 ref

<xsd:choice>
  <xsd:element name="Sequence"/>
  <xsd:element name="HandshakeId"/>
</xsd:choice>

至少这对我有用。

【讨论】:

以上是关于修改 XML 模式时如何管理 ItemChoiceType 枚举的更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何管理生产数据库的模式升级?

JDOM 如何修改XML文档中的CDATA段数据

在针对 XML 模式验证 XML 文件时如何获取错误的行号

Java开发Spring之AOP详解(xml--注解->方法增强事务管理(声明事务的实现))

Android 组件化项目模式管理模式切换

Android 组件化项目模式管理模式切换