我使用schematron来验证xml。我想创建一个规则来检查加拿大邮政编码(仅限格式)。有效的正则表达式为:/ [ABCEGHJKLMNPRSTVXY] \ d [ABCEGHJKLMNPRSTVWXYZ] \ d [ABCEGHJKLMNPRSTVWXYZ] \ d /
我只能使用xslt1作为绑定。我正在使用Saxon xsl库。
如果我使用此示例xml:
<address><postalcode>T2R2R2</postalcode></address>
我如何创建一个可以在schematron中验证的规则?
非常感谢任何帮助。
谢谢,
特里
答案 0 :(得分:0)
XSLT 1.0不支持正则表达式。但是有一种方法可以使用Schematron规则验证这种模式:
<sch:rule context="postalcode">
<sch:assert test="child::text()[
string-length() = 6
and translate(
substring(.,1,1),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
''
) = ''
and translate(
substring(.,2,1),
'0123456789',
''
) = ''
and translate(
substring(.,3,1),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
''
) = ''
and translate(
substring(.,4,1),
'0123456789',
''
) = ''
and translate(
substring(.,5,1),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
''
) = ''
and translate(
substring(.,6,1),
'0123456789',
''
) = ''
]">postalcode '<sch:value-of select="."/>' does not follow required pattern.</sch:assert>
</sch:rule>
这有点麻烦,但确实有效。
检查邮政编码是否由6个字符组成,然后依次检查每个字符。