【问题标题】:How to validate if XML matches the XSD using the xmlet / XsdParser in Java如何使用 Java 中的 xmlet / XsdParser 验证 XML 是否与 XSD 匹配
【发布时间】:2021-06-24 15:12:06
【问题描述】:

我正在尝试验证 XML 是否符合 XSD。为此,我使用了xmlet/XsdParser,但除了 GitHub 页面之外,我找不到任何好的示例。

在自述文件中,他们只提供了如何将XSD 转换为相应的Java objects,但没有说明如何验证 XML 是否与 XSD 匹配。

以下是我拥有的读取 XSD 并创建 Java 对象的代码:

public class XSDParser {

    public static void main(String[] args) throws URISyntaxException {
        String xsdPath = Paths.get(XSDParser.class.getClassLoader().getResource("test.xsd").toURI()).toFile().getAbsolutePath();
        String filePath = Path.of(xsdPath).toString();
        XsdParser parserInstance = new XsdParser(filePath);
        System.out.println(filePath);
        Stream<XsdElement> elementsStream = parserInstance.getResultXsdElements();
        Stream<XsdSchema> schemasStream = parserInstance.getResultXsdSchemas();

    }
}

此代码读取 XSD 文件并创建元素的 Stream。现在我还添加了以下代码行,它们将读取 XML 文件并创建流:

String absolutePath = Paths.get(ApplicationMain.class.getClassLoader().getResource("inputXML.xml").toURI()).toFile()
                            .getAbsolutePath();
        String path = Path.of(absolutePath).toString();
        File xml = new File(path);
        InputStream stream = new FileInputStream(xml);

现在,我想知道我的 XML 是否符合我已读取和存储的 XSD。如何做到这一点?

  1. 我想使用XMLET/XSDPARSER 来解析我的XSD 文件。
  2. 我正在使用SAX PARSER 解析我的 XML 文件。
  3. 我在网上找不到任何使用XMLET/XSDPARSER 实现的好的示例。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: java xml xsd xml-parsing xsd-validation


    【解决方案1】:

    您使用的库显然是一个用于分析 XSD 架构的库,而不是用于使用该架构进行验证的库,因此您使用了错误的工具来完成这项工作。您可以使用 JAXP 接口在 Java 中执行 XSD 1.0 验证(请参阅 https://docs.oracle.com/javase/tutorial/jaxp/dom/validating.html),如果您想使用 XSD 1.1,请下载 Apache Xerces 或 Saxon。

    【讨论】:

    • 感谢您的回复。实际上,我正在尝试将 XML 转换为 JSON。在转换为 JSON 时,我想知道每个元素可以采用什么类型的对象。我想使用xmlet/XsdParser 进行检查,以便我可以在我的JSON 中相应地创建ObjectArray。我猜想可以使用该库。但我在谷歌的任何地方都找不到任何例子。如果可能,请告诉我如何使用xmlet/XsdParser 验证 XSD 中 XML 可用的对象类型?即使是带有少量标签的基本示例也适用于我。
    • 抱歉,我不知道xmlet 库。如果我这样做,我会在 Saxon 中使用模式感知 XSLT 转换,它会在实例文档的每个节点上为您提供 XSD 类型注释,然后使用这些类型注释来控制进一步的处理。
    • 好的,非常感谢您的回复。我会尝试 XSDParser 如果这不起作用,那么我会选择 SAX,就像你提到的那样。
    • 我对XSD解析有疑问希望您能提供帮助:正如我之前提到的,我想知道我在XSD文件中遇到的XML文件中每个元素的数据类型,所以我是寻找一个高效和最好的图书馆。我遇到了SAXONXERCES2。我想知道哪个是更好的选择?
    • 作为Saxon的作者,我自然会推荐它作为更好的选择。但是你不应该在 StackOverflow 上寻求产品选择方面的建议。
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多