在根据架构验证XML时,我收到了即将发生的错误。
Value 'this/is/a/simple/node-path' is not facet-valid
with respect to pattern '^(\w+[\w\-/])+\w' for type 'PathModel'.
类型PathModel
的定义定义为simpleType
,如下面的代码段所示。它由<path>this/is/a/simple/node-path</path>
<xs:simpleType name="PathModel">
<xs:restriction base="xs:string">
<xs:pattern value="^(\w+[\w\-/])+\w" />
</xs:restriction>
</xs:simpleType>
预期结果列在此匹配表中。
this/is/a/simple/node-path MATCHING
/this/is/a/simple/node-path NOT MATCHING
this/is/a/simple/node-path/ NOT MATCHING
this/is/a/simple/nodep%th NOT MATCHING (special characters)
出了什么问题?谢谢
答案 0 :(得分:5)
删除前导^
字符。
<xs:simpleType name="PathModel">
<xs:restriction base="xs:string">
<xs:pattern value="(\w+[\w\-/])+\w" />
</xs:restriction>
</xs:simpleType>
这是您提供的套装中唯一有效的值:
this/is/a/simple/node-path
这应该为你做的(在我的Eclipse IDE中测试)。
原因很明显,例如:http://www.regular-expressions.info/xml.html
“与其他正则表达式风格相比,XML模式风格在功能上非常有限。因为它仅用于验证整个元素是否与模式匹配,而不是用于从大块数据中提取匹配。 XML模式总是隐式地锚定整个正则表达式。正则表达式必须匹配整个元素才能认为元素有效。如果你有模式regexp
,XML模式验证器将把它应用于与Perl,Java或.NET相同的方式可以使用模式^regexp$
。“
答案 1 :(得分:-2)
据我所知,正则表达式似乎是有效的,并且应该根据XSD规范给出匹配表中显示的结果。使用Microsoft .NET Framework 2和测试用例,使用您的路径值和正则表达式,我得到了您期望的结果。
所以,你所看到的可能原因是:
如果您告诉我们您正在使用的实施方式并发布您的代码,则可能会有所帮助。