使用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