当前位置: 首页 > 面试题库 >

针对多个架构定义验证XML文件

林鸿飞
2023-03-14
问题内容

我正在尝试针对许多不同的模式(对人为的示例表示歉意)来验证XML文件:

  • xsd
  • 格式
  • 格式

c.xsd特别是导入b.xsd和b.xsd导入a.xsd,使用:

<xs:include schemaLocation="b.xsd"/>

我正在尝试通过Xerces以以下方式执行此操作:

XMLSchemaFactory xmlSchemaFactory = new XMLSchemaFactory();
Schema schema = xmlSchemaFactory.newSchema(new StreamSource[] { new StreamSource(this.getClass().getResourceAsStream("a.xsd"), "a.xsd"),
                                                         new StreamSource(this.getClass().getResourceAsStream("b.xsd"), "b.xsd"),
                                                         new StreamSource(this.getClass().getResourceAsStream("c.xsd"), "c.xsd")});     
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new StringReader(xmlContent)));

但这无法正确导入所有三个架构,导致无法将名称“ blah”解析为一个(n)“ group”组件。

我已经使用 Python 成功地验证了这一点,但是 Java 6.0Xerces 2.8.1
确实存在问题。有人可以建议出什么问题在这里,还是一种更简单的方法来验证我的XML文档?


问题答案:

因此,以防万一其他人遇到相同的问题,我需要从单元测试中加载父模式(和隐式子模式),作为一种资源,以验证XML字符串。我使用Xerces
XMLSchemFactory以及Java 6验证程序来完成此操作。

为了通过include正确加载子模式,我必须编写一个自定义资源解析器。代码可以在这里找到:

https://code.google.com/p/xmlsanity/source/browse/src/com/arc90/xmlsanity/validation/ResourceResolver.java

要使用解析器,请在架构工厂中指定它:

xmlSchemaFactory.setResourceResolver(new ResourceResolver());

它将使用它通过类路径(在我的情况下为src / main / resources)解析资源。欢迎对此发表任何评论…



 类似资料:
  • 问题内容: 但是,这将返回一条错误消息:线程“ main”中的异常java.lang.IllegalArgumentException:无法加载实现由http://www.w3.org/2001/XMLSchema -instance 指定的模式语言的SchemaFactory。 这是我的代码还是实际的xsd文件有问题? 问题答案: 该错误意味着您安装的Java没有任何可解析XMLSchema文件

  • 我需要针对给定的XSD文件验证多个XML文件。问题是XSD由两个文件组成。它们是嵌套的,尽管我知道哪个是第一个(其他文件的“父”)。在XML文件中,我使用命名空间来定义子节点在哪个XSD中定义

  • 问题内容: 我正在生成一些XML模式,并希望确保我们的生成器正在创建有效的XML模式文档(不是XML)。我试图提出验证XML Schema文档的代码,但失败了。我不认为会这么复杂。 这段代码与我需要做的非常接近,但是出现以下错误。 我在调用setSchema(uri)时使用URL,以确保XMLSchema.dtd和datatypes.dtd是相对的,希望它们可用,但是我不确定如何进行检查。 我猜想

  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):

  • 我对XML非常陌生,我面临着验证问题,如果我的XML和XSD文件结构良好,我也希望得到一些反馈。 在根据XSD验证XML时,我经常遇到错误- 下面的XML XSD 如果你发现其中任何一个有任何错误,请随时指出。它们都有从图案到最大长度的限制。 谢谢!!!!

  • 使用eclipse时,我消除了所有错误,但当我更改xml文档中的元素内容时,超出了中设置的限制。xsd文件没有出现验证错误。我已尝试使用联机验证http://www.freeformatter.com/xml-validator-xsd.html我得到了错误“Cvc elt.1:找不到元素“DatabaseInventory”…行“4”,列“69”的声明”,但在eclipse中它验证得很好。不知道