【发布时间】:2013-05-16 20:34:17
【问题描述】:
我有一个 XSD 架构,其中包含特定字段的规则以匹配以下正则表达式:
\d{8}[\-]?[A-Za-z]{0,3}
使用 irb,我可以使用这个正则表达式进行测试,并且以下字符串都匹配,这是正确的:
12345678
12345678-
12345678-abc
12345678abc
当我尝试针对此 XSD 验证某些 XML 时,我得到的行为略有不同:
Passes:
12345678-
12345678-abc
12345678abc
Fails:
12345678
这里有一个最小的 XSD/XML 文件,可以重现这个:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="codeType">
<xs:restriction base="xs:token">
<xs:pattern value="\d{8}[\-]?[A-Za-z]{0,3}"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element type="codeType" name="code"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
和 XML:
<?xml version="1.0" encoding="UTF-8"?>
<test>
<code>11034755</code>
</test>
并运行它
xmllint --schema test.xsd test.xml
给
Element 'code': [facet 'pattern'] The value '11034755' is not accepted by the pattern '\d{8}[\-]?[A-Za-z]{0,3}'
虽然 XML 模式没有完整的正则表达式,但我认为这应该是有效的。在这种特殊情况下,对于 XSD 文件中的正则表达式,关于“? ?
【问题讨论】:
-
由于您没有向我们提供您要验证的 XML,因此我们无法为您提供可靠的答案。重要的是要记住给我们代码、示例数据、预期输出、实际输出和一个好的解释。你做得越好,我们就能越好地为你提供帮助。记住:GIGO。