我可以在XSD生成的类中填充整数吗?

时间:2010-10-04 14:45:12

标签: .net xml xsd xml-serialization

情况就是这样:我有一个客户端给我发了一个XML模式,我的软件将他们的记录从制表符分隔转换为XML。

其中一个字段“文件序列”在模式中键入为整数。但是,客户端的客户端(集成目标)希望实际输出XML中的整数为零填充和4位长(EG,<file-sequence>0001</file-sequence>)。

我正在使用序列化输出,这很好,自动且无痛。但是,因为字段在XSD中键入为整数,所以文件序列字段显示为<file-sequence>1</file-sequence>。这是有道理的。 :)

到目前为止,我已将可能的答案缩小到三个选项:

  1. 编辑架构并将类型更改为字符串。在更新字段时对序列号进行零填充。缺点:我必须记住,只要集成目标改变了架构,它就会这样做(因为它们已经有大约六次了)。

  2. 使用XML序列化,在代码中手动生成XML。缺点:很多工作,可能容易出错,严重的代码味道(对我而言)。

  3. 序列化到内存中的流,从中获取原始XML,在那里填充整数。缺点:感觉真的很脏,还有很多工作。

  4. 还有其他选择吗?如果没有,这里的选项是正确的方法吗? (我认为选项1可能是最干净的。)

2 个答案:

答案 0 :(得分:2)

老实说,选项1是唯一真正的选择。如果目标关心字符串中的字符数,则该字段不是整数;它是一个仅限于数字的字符串。

答案 1 :(得分:0)

我理解你的选项1可能会让你得到你所追求的东西。我的第一反应是将感兴趣的数据类型定义为约束整数,具体来说,是

中的一个。
xsd:integer {minLength = '4' maxLength = '4'}

如果这不令人满意,也许是正则表达式

xsd:string {pattern = ...}

会有所帮助。