2017-05-24 52 views
0

我需要验证一些使用EXSLT的Schematrons http://cpe.sunat.gob.pe/sites/default/files/inline-images/Reglas%20de%20Validaci%C3%B3n.zip的XML。我使用的Xalan Apache和SaxonHE为好,但由于schematrons使用正则表达式那些不起作用:匹配,我真的有验证与个XML包含正则表达式的Schematron的问题,例如:使用Java中的EXSLT验证XML?

<xsl:if test="./cbc:ID/@schemeID ='02' and not(regexp:match(./cbc:ID,'^[F][A-Z0-9]{3}-[0-9]{1,8}$|^(E001)-[0-9]{1,8}$|^[0-9]{1,4}-[0-9]{1,8}$'))"> 

对于EXSLT的代码可以在GitHub https://github.com/bzerangue/exslt.org

我的问题是,如果有验证使用Java或JavaScript的schematrons个XML的方式。

请帮帮我!

回答

1

Saxon 9 HE是XSLT 2.0处理器,因此它支持使用正则表达式的XSLT和XPath函数,如https://www.w3.org/TR/xpath-functions/#func-matches。您应该能够替换使用例如not(regexp:match(./cbc:ID,'^[F][A-Z0-9]{3}-[0-9]{1,8}$|^(E001)-[0-9]{1,8}$|^[0-9]{1,4}-[0-9]{1,8}$'))not(matches(cbc:ID,'^[F][A-Z0-9]{3}-[0-9]{1,8}$|^(E001)-[0-9]{1,8}$|^[0-9]{1,4}-[0-9]{1,8}$'))

+2

如果您不想更改生成的代码,您可以添加一个函数'regexp:match()'作为用xsl:function声明的用户定义函数,调用'fn:matches() '。 –

+0

感谢Martin Honnen和Michael Kay,它确实有效:) –