【问题标题】:JAXB - Using namespace prefixes defined in XSDJAXB - 使用在 XSD 中定义的命名空间前缀
【发布时间】:2013-07-24 12:45:05
【问题描述】:

我想知道是否有办法强制 JAXB 创建与 XSD 模式相同的名称空间前缀。即即使我从其中包含 xmlns:cts="http://cts.com" 的模式创建 JAXB 类,在编组类之后,我得到一个带有 xmlns:ns1 前缀的 XML。我知道我可以通过使用 NamespacePrefixMapper 类来覆盖这些,但是当我的 XSD 明确定义了默认前缀时,为什么我需要手动执行此操作?我当前的 XML 中有大量前缀,因此在初始 xjc 生成之后手动更改包级声明或类注释也是一个巨大的返工。我正在处理一个包含 10 多个 XSD 导入和 5000 多个元素以及数十个根元素的基本 XSD。

端点系统超出了我们的控制范围,因此我必须关心在 XML 中使用了哪些前缀,因为它们没有适当的 XML 处理实现。

这有什么捷径吗?感谢您的所有意见。

问候, 古可汗

【问题讨论】:

    标签: xml jaxb xsd xml-namespaces


    【解决方案1】:

    最简单的捷径是让 XML 的生产者和消费者使用标准的 XML 处理工具。你说这在你的情况下不起作用。

    结果是,为了让您的数据消费者免于学习使用现有的现成 XML 工具,您将不得不付出努力,不仅要生成正确的 XML,还要生成正确的 XML在大多数 XML 软件旨在隐藏的抽象级别上满足额外的任意临时约束。如果他们是非常好的客户,这可能是值得的。

    具体来说,我要么 (1) 找到一种方法来自动化您想要对 JaxB 生成的类进行的配置更改,要么 (2) 编写一个简单的 SAX 过滤器来规范命名空间前缀,并通过以下方式运行数据那个过滤器在出门的路上。第二种方法的优点是将您的数据消费者的关注点转移到您自己处理的外围,让您更好地专注于您更关心的事情。

    【讨论】:

      猜你喜欢
      • 2015-02-01
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多