首页 > 解决方案 > 双值的分号分隔列表的 XSD 模式

问题描述

有没有办法为分号分隔的双精度值指定 XSD 模式?

<test>2.5;25.2e7;-0.5e8</test>

这是我的方法:

 <xsd:pattern value="[-+]?[0-9][0-9]*.[0-9][0-9]*([eE][-+]?[0-9][0-9]*)?(;?[-+]?[0-9][0-9]*.[0-9][0-9]*)*"/>

但我仍然发现很多例子,它给了我验证错误。如果找到类似的东西\d+,但到目前为止没有帮助。

感谢您的回答!

标签: xmlxsd

解决方案


如果您只想在冒号之前和之后允许两位数字,那么您在模式中所缺少的只是第二个和后续浮点数的重复模式中的指数表达式。您应该按如下方式修改您的模式:

<xs:pattern value="[-+]?[0-9][0-9]*.[0-9][0-9]*([eE][-+]?[0-9][0-9]*)?(;?[-+]?[0-9][0-9]*.[0-9][0-9]*([eE][-+]?[0-9][0-9]*)?)*"/>

或者在更紧凑的版本中,为了便于阅读,还添加了一些括号,并允许在冒号前后有更多数字:

<xs:pattern value="([-+]?\d+.\d+([eE]?\d+)?)(;([-+]?\d+.\d+([eE]?\d+)?))*"/>

可以限制为冒号前后的两位数:

<xs:pattern value="([-+]?\d{1,2}.\d{1,2}([eE]?\d{1,2})?)(;([-+]?\d{1,2}.\d+([eE]?\d{1,2})?))*"/>

推荐阅读