2017-05-24 6 views
0

EXSLTを使用するスキーマトロンhttp://cpe.sunat.gob.pe/sites/default/files/inline-images/Reglas%20de%20Validaci%C3%B3n.zipでいくつかのXMLを検証する必要があります。私は同様に使用したXalan ApacheとSaxonHEをしましたが、それらはschematronsが正規表現を使用しているため動作しません:と一致して、私は本当に、たとえば、正規表現が含まれていたもののSchematronでXMLSを検証し、問題があります。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とXMLSを検証する方法があれば私の質問です。

私を助けてください!

答えて

1

Saxon 9 HEはXSLT 2.0プロセッサであるため、https://www.w3.org/TR/xpath-functions/#func-matchesのような正規表現を使用してXSLTとXPath関数をサポートしています。あなたは、あなたの使用方法を置き換えることができるはずです。 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

マーティン・ホーネンとマイケル・ケイ、ありがとうございます:) –

関連する問題