我使用schematron验证xml。我想创建一个规则来检查加拿大邮政编码(仅限格式)。有效的正则表达式应该是:/[ABCEGHJKLMNPRSTVXY]d[ABCEGHJKLMNPRSTVWXYZ]d/
我只能使用xslt1作为绑定。我正在使用Saxon的xsl库。
如果我使用这个示例xml:
<address><postalcode>T2R2R2</postalcode></address>
我如何在schematron中创建一个规则来验证这个呢?
任何帮助都将是非常感激的。
谢谢,特里
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个字符组成,然后依次检查每个字符。