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

时间:2014-03-27 17:06:18

标签: xml xpath xsd

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

<longitude>10</longitude> 

时,

应该通过验证失败

<longitude>10.0</longitude> 

应该通过。

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

现在,当架构验证运行时,没有小数点的十进制值将被抛出为错误。

答案 1 :(得分:1)

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

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