【问题标题】:validating xml in java as the document is built在构建文档时验证 java 中的 xml
【发布时间】:2010-01-06 08:55:12
【问题描述】:

我正在将一个 excel 电子表格转换为一个需要根据架构进行验证的 xml 文档。我目前正在使用 DOM api 构建 xml 文档,并在最后使用 SAX 和自定义错误处理程序进行验证。但是,我真的希望能够在解析 excel 文档时验证每个 Cell 生成的 xml,这样我就可以以更友好的方式指出哪些单元格有问题。

我目前遇到的问题是,在验证简单类型​​的 xml 后,一旦将它们构建为复杂类型,所有子节点都会再次验证,从而产生冗余错误。

我在 SO 找到了this 问题,但它使用的是 C# 和 Microsoft API。

想法?谢谢!

【问题讨论】:

    标签: java xml dom sax


    【解决方案1】:

    抱歉,我没发现问题。您正在生成 XML,那么在生成它时验证 XML 有什么意义呢?

    您是否要验证单元格内容?如果是,则将验证逻辑写入您的代码。此验证逻辑可能会复制架构,但我怀疑它实际上会比架构更详细。

    您是否希望验证程序的输出?如果是,则编写单元测试。

    【讨论】:

    • 我希望根据 XSD 验证单元格内容。 excel 文件的结构反映了 XSD 的结构。
    【解决方案2】:

    您可以尝试让解析代码触发 SAX 事件,而不是直接构建 DOM。然后你可以注册一个验证 SAX ContentHandler 来监听它并让它为你构建你的 DOM。这应该会在遇到验证错误时检测到它们。

    【讨论】:

    • 如何使用 SAX 解析我尚未创建的内容?我在解析 Excel 文件时使用 DOM 构造 XML。
    【解决方案3】:

    所以我决定采用并且几乎完成实施的解决方案是使用 XSOM 来解析 XSD。与解析 Excel 文件相比,我在解析的 XSD 中查找列名以提取限制(因为列标题映射到 XSD 中的简单类型),而不是针对限制进行手动验证。我仍在构建树,以便在最后我可以针对 XSD 验证整个 XML 树,因为有些东西我无法在单元级别捕获。

    感谢您的所有意见。

    【讨论】:

      【解决方案4】:

      尝试在多个粒度级别构建架构。用最细粒度的模式测试简单的(单元格),用不分解复杂类型的粒度较小的模式测试复杂的模式(行?)。

      【讨论】:

      • 该架构实际上由多个 XSD 组成,并且总体上相当大。我想我只会在万不得已的情况下才会走这条路。
      猜你喜欢
      • 1970-01-01
      • 2011-12-09
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多