【问题标题】:Validating against multiple xml schemas with Xerces DOM parser使用 Xerces DOM 解析器验证多个 xml 模式
【发布时间】:2011-01-25 23:48:08
【问题描述】:

我想知道是否有一种方法可以在 C++ 中使用 Xerces DOM 解析器来验证多个 xml 方案?

以下是用例:我希望能够针对其对应的 xsd 架构解析多个 xml 文件。但是,当我最初查看每个 xml 文件时,在解析它之前我不知道它是什么文件,因此我无法将静态 xsd 文件链接到它。有没有办法说,我想针对 xsd1 或 xsd2 等验证每个 xml 文件...

在阅读之后,解析器“setExternalSchemaLocation”的设置似乎能够保存一个方案列表,但是当我在我的代码中执行此操作时,它无法正确验证。

parser->setExternalSchemaLocation("http://www.somelocation schema.xsd http://www.somelocation schema1.xsd");

如果我这样做,架构会自行工作

parser->setExternalSchemaLocation("http://www.somelocation schema.xsd");

所以我确定我的 xml 或 xsd 文件中没有错误。

对如何针对多个 xml 模式进行验证有任何见解吗?

【问题讨论】:

  • 您是否尝试过将架构分别设置为两个命令而不是一行?类似于 :parser->setExternalSchemaLocation("somelocation schema.xsd"); parser->setExternalSchemaLocation("somelocation schema1.xsd");
  • @Sii:这行不通,Xerces 文档说:“如果多次调用此方法,则只有最后一个生效。”
  • @Sii 是的,我已经分别尝试了这两个命令,正如 Eugen 提到的,它会相互覆盖。
  • @Eugen 抱歉,没有错误消息。那是我的一个错字。我希望 Xerces 在 xml 与架构不匹配时能够引发错误。当我将它与一个模式进行比较时,此操作已成功执行。当我尝试将它与多个模式(如上面的代码 sn-p)进行比较时,它应该不会失败。所以我想知道是否有办法针对多个模式验证 xml 文件。

标签: c++ xerces validating


【解决方案1】:

如果每个 xml 都在同一个命名空间中,则代码不起作用。每个 xml 文件必须位于不同的命名空间中,以上代码才能正常工作。

parser->setExternalSchemaLocation("http://www.somelocation schema.xsd http://www.somelocation1 schema1.xsd"); 

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2012-04-17
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多