【问题标题】:Validate XML file against several XSD and know which one validates the file (jdom2)针对多个 XSD 验证 XML 文件并知道哪个验证文件 (jdom2)
【发布时间】:2016-02-04 11:12:55
【问题描述】:

我想针对两个不同的 XSD 验证 XML 文件,因为我知道不必针对这两个 XSD 验证 XML 文件,而只需针对其中一个进行验证。然后我需要知道哪个 XSD 文件验证 XML 文件以便访问不同的元素。

XSD 文件属于这种类型:sdfcsdf,但我有自己的版本,所以我不使用 XML 标头中存在的架构(并且我不想要求用户修改它)。

问题:如何轻松地进行验证测试,然后使用单个 xml 库(如果可能的话 jdom2)解析 XML 文件(根据正确的架构)?

目前我使用 javax 进行验证,使用 jdom2 访问元素,但我认为/希望可以使用一个库来做同样的事情,至少为了不一次又一次地解析文件。而且,正如a smilar question 中指出的那样,我宁愿不吸毒以了解 javax 的工作原理。

【问题讨论】:

    标签: java xsd-validation jdom-2


    【解决方案1】:

    使用 JDOM 2,您可以设置两种不同的 XML 阅读器 - 每个模式一个。

    然后,您可以使用 SAXParser 并通过阅读器阅读文档,通过阅读器的人就是架构正确的人。

    考虑类似 (XMLReaderXSDFactory:

    sdfreader = new XMLReaderXSDFactory("http://www.es.ele.tue.nl/sdf3/xsd/sdf3-sdf.xsd");
    csdfreader = new XMLReaderXSDFactory("http://www.es.ele.tue.nl/sdf3/xsd/sdf3-csdf.xsd");
    

    然后,通过这些阅读器工厂,您可以设置一个 SAXBuilder with a different constructor

    SAXBuilder sdfbuilder = new SAXBuilder(sdfreader);
    SAXBuilder csdfbuilder = new SAXBuilder(csdfreader);
    

    现在,您可以通过其中任何一个来构建文档。无论哪一个“成功”构建了文档,都具有正确的架构。

    try {
        Document doc = sdfbuilder.build(somexml);
        System.out.println("Parsed using sdf")
        return doc
    } catch (JDOMException x) {
        // parse failed, probably wrong schema....
    }
    
    try {
        Document doc = csdfbuilder.build(somexml);
        System.out.println("Parsed using csdf")
        return doc
    } catch (JDOMException x) {
        // parse failed, probably wrong schema....
    }
    
    // oops, nothing works for this document...
    

    【讨论】:

    • 谢谢,这对我来说似乎很好!我已经看到了 XMLReaderXSDFactory 类以及为单个构建器使用多个 xsd 文件的可能性,但我没想过要简单地创建两个不同的构建器:p
    猜你喜欢
    • 2014-02-05
    • 2012-09-20
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2012-07-23
    相关资源
    最近更新 更多