查找XSD限制基数为“xs:decimal”的XML文档中的所有节点

我有一个奇怪的要求 . 我们想要实现一个验证检查,确认传入的xml中的所有十进制值都有一个小数点 . 虽然在语义上有效,

<longitude>10</longitude>

应该在此验证失败

<longitude>10.0</longitude>

应该通过 .

我正在考虑创建XML文档,加载XSD并使用XPath查找XML文档中的所有节点,其中节点的XSD定义定义为:

<xs:simpleType><xs:restriction base="xs:decimal">

是否可以在xml中找到“所有小数节点”,即使它们的类型(限制)是在XSD中定义的?若然,XPATH会是什么样子?

或者我最好在XSD中写一个 <Rule> 并让验证器完成繁重的工作?如果是这样,该规则会是什么样子?

谢谢!

回答(2)

2 years ago

我找到了答案..我创建了一个正则表达式规则并添加到XSD:

<xs:restriction base="xs:decimal">                                                                          
            <xs:pattern value ="^[0-9]+\.([0-9])?$" /> <-- Added this line

现在,当架构验证运行时,不带小数点的十进制值将作为错误抛出 .

2 years ago

要回答您的原始问题,可以在架构感知XPath 2.0中编写

//element(*, xs:decimal)[matches(text(), '\.')]