使用Java中的Xerces对XSD 1.1进行XMLvalidation

我已经通过Maven安装了Xerces:

  junit junit 4.11 test   org.jdom jdom 2.0.2   xerces xercesImpl 2.11.0   

然后,我尝试使用Xerces FAQ中的此示例中给出的代码,根据1.1版中的模式validationXML文件。 这是我的代码:

 private static void validateFile(File xmlFile, File xsdFile) throws SAXException, IOException { // 1. Lookup a factory for the W3C XML Schema language SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1"); // 2. Compile the schema. File schemaLocation = xsdFile; Schema schema = factory.newSchema(schemaLocation); // 3. Get a validator from the schema. Validator validator = schema.newValidator(); // 4. Parse the document you want to check. Source source = new StreamSource(xmlFile); // 5. Check the document try { validator.validate(source); System.out.println(xmlFile.getName() + " is valid."); } catch (SAXException ex) { System.out.println(xmlFile.getName() + " is not valid because "); System.out.println(ex.getMessage()); } } 

代码只会产生此exception:

 java.lang.IllegalArgumentException: No SchemaFactory that implements the schema language specified by: http://www.w3.org/XML/XMLSchema/v1.1 could be loaded at javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java:204) at example.xml.XSDValidator.validateFile(XSDValidator.java:65) 

好像我没能正确配置/安装Xerces。 请帮我搞定,XML文件迫使我在1.1中使用模式,我有一个正常的1.0运行validation器,但我有很大的问题。 我很欣赏每一个提示!

看起来你需要Xerces2 Java 2.11.0(XML Schema 1.1)(Beta)版本,它不在maven资源库中。 您可以从Xerces网站下载它,并将其安装到您当地的maven存储库: mvn install:install-file -Dfile=xercesImpl.jar -DgroupId=xerces -DartifactId=xercesImpl -Dversion=2.11.0.beta -Dpackaging=jar Then您将能够将其包含在Maven项目依赖项中:

  xerces xercesImpl 2.11.0.beta  

我将添加另一个答案,因为对我来说这种依赖不起作用(与OP描述的错误相同):

  xerces xercesImpl 2.11.0  

我quess 2.11.0应该比2.11.0.beta更新,但似乎xsd1.1在该版本中不受支持!

相反,只有以下依赖项才能为我提供有效的XSD1.1validation:

  org.opengis.cite.xerces xercesImpl-xsd11 2.12-beta-r1667115  

(在此SO线程中找到: 如何在Java中针对XSD 1.1validationXML? )

我认为他们现在已经将版本2.11添加到了maven。 Maven中的以下依赖项是开箱即用的:

  xerces xercesImpl 2.11.0