情况就是这样:我有一个客户端给我发了一个XML模式,我的软件将他们的记录从制表符分隔转换为XML。
其中一个字段“文件序列”在模式中键入为整数。但是,客户端的客户端(集成目标)希望实际输出XML中的整数为零填充和4位长(EG,<file-sequence>0001</file-sequence>
)。
我正在使用序列化输出,这很好,自动且无痛。但是,因为字段在XSD中键入为整数,所以文件序列字段显示为<file-sequence>1</file-sequence>
。这是有道理的。 :)
到目前为止,我已将可能的答案缩小到三个选项:
编辑架构并将类型更改为字符串。在更新字段时对序列号进行零填充。缺点:我必须记住,只要集成目标改变了架构,它就会这样做(因为它们已经有大约六次了)。
使用XML序列化,在代码中手动生成XML。缺点:很多工作,可能容易出错,严重的代码味道(对我而言)。
序列化到内存中的流,从中获取原始XML,在那里填充整数。缺点:感觉真的很脏,还有很多工作。
还有其他选择吗?如果没有,这里的选项是正确的方法吗? (我认为选项1可能是最干净的。)
答案 0 :(得分:2)
老实说,选项1是唯一真正的选择。如果目标关心字符串中的字符数,则该字段不是整数;它是一个仅限于数字的字符串。
答案 1 :(得分:0)
我理解你的选项1可能会让你得到你所追求的东西。我的第一反应是将感兴趣的数据类型定义为约束整数,具体来说,是
中的一个。xsd:integer {minLength = '4' maxLength = '4'}
如果这不令人满意,也许是正则表达式
xsd:string {pattern = ...}
会有所帮助。