Vog*_*ltz 9 java xml validation xerces xsd-1.1
我已经通过Maven安装了Xerces:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
然后,我在Xerces FAQ中尝试了此示例中给出的代码,以针对1.1版中的模式验证XML文件.这是我的代码:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
代码只会产生此异常:
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)
Run Code Online (Sandbox Code Playgroud)
好像我没能正确配置/安装Xerces.请帮我搞定这个,XML文件强迫我使用1.1中的模式,我有一个正常的1.0运行验证器,但我有很大的问题.我很欣赏每一个提示!
看起来你需要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
然后您就可以将它包含在您的Maven项目依赖项中:
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0.beta</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我将添加另一个答案,因为对我来说这种依赖不起作用(与OP描述的错误相同):
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.11.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我quess 2.11.0应该比2.11.0.beta更新,但似乎xsd1.1在该版本中不受支持!
相反,只有以下依赖项才能为我提供有效的XSD1.1验证:
<dependency>
<groupId>org.opengis.cite.xerces</groupId>
<artifactId>xercesImpl-xsd11</artifactId>
<version>2.12-beta-r1667115</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(在此SO线程中找到:如何在Java中针对XSD 1.1验证XML?)