如何使用 Java 11 和具有导入功能的 XSD 来验证 XML 文件?

问题描述 投票:0回答:1

我有一个带有 Spring Boot 2.7 的 Java 11 应用程序。我需要使用 XSD 文件验证 XML 文件。这些 XSD 文件包含像 这样的导入,并且 core-schema.xsd 文件位于导入它的 XSD 文件旁边。我的应用程序作为 JAR 文件部署在容器中,XSD 文件位于“resources”目录中。这意味着我无法在不使用 InputStream 的情况下直接在代码中访问它们。

为了验证,我使用以下代码:

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
final Schema schema = sf.newSchema(monXSDFile);
final Validator validator = schema.newValidator();

final StringReader reader = new StringReader(content);
validator.validate(new StreamSource(reader));

现在,我尝试在 sf.newSchema() 方法中使用 XSD 文件的 InputStream,同时仍然允许访问导入的“core-schema.xsd”文件。

我尝试使用以下代码:

final Schema schema = sf.newSchema(new Source[] {
    new StreamSource(xsdFile),
    new StreamSource(coreSchemaFile)
});

然而,这并没有达到预期的效果。我该如何修改我的方法来实现这一目标? 谢谢

java xml spring-boot xsd xsd-validation
1个回答
0
投票

您可以通过两种方式根据 XSD 验证 XML:

  1. 使用 jaxb maven 插件。看这里:https://howtodoinjava.com/jaxb/xsd-schema-validation/
  2. 使用 javax.xml.validation.Validator:请看这里:https://www.digitalocean.com/community/tutorials/how-to-validate-xml-against-xsd-in-java

我更喜欢使用 jaxb maven 插件。

© www.soinside.com 2019 - 2024. All rights reserved.