2017-05-24 25 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,它確實有效:) –