在 Java 中使用 EXSLT 验证 XML?

Validate XML with EXSLT in Java?

我需要使用使用 EXSLT 的模式 http://cpe.sunat.gob.pe/sites/default/files/inline-images/Reglas%20de%20Validaci%C3%B3n.zip 验证一些 XML。我也使用过 Xalan Apache 和 SaxonHE,但是它们不起作用,因为 schematron 正在使用 regexp:match 并且我在使用那些包含正则表达式的 schematron 验证 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 或 java 脚本来使用这些模式验证 XML。

请帮帮我!

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}$'))