gpt4 book ai didi

java - xjc 处理重复元素

转载 作者:行者123 更新时间:2023-12-02 05:34:41 29 4
gpt4 key购买 nike

  1. 我有三个 XSD 文件:a.xsd、b.xsd 和 c.xsd
  2. 每个都包含一个名为 MyHeader 的 xs:element
  3. 我尝试使用 xjc 从这三个 XSD 文件生成 java 类
  4. 生成java文件时出错

以下是所有三个 XSD 的共同部分:

<xs:element name="MyHeader">
<xs:complexType>
<xs:attribute name="Username" type="xs:string" />
<xs:attribute name="Password" type="xs:string" />
</xs:complexType>
</xs:element>

错误消息为[xjc] [ERROR] 'MyHeader'已定义

然后我尝试使用外部绑定(bind)来解决问题,因为我真的希望 MyHeader 可以是一个 java 类。

我的外部绑定(bind)就像

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xsi:schemaLocation=" http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
version="2.1">
<bindings schemaLocation="./a.xsd" node="/xs:schema">
<bindings node="//xs:element[@name='MyHeader']">
<class name="MyHeader" />
</bindings>
</bindings>

<bindings schemaLocation="./b.xsd" node="/xs:schema">
<bindings node="//xs:element[@name='MyHeader']">
<class name="MyHeader" />
</bindings>
</bindings>

<bindings schemaLocation="./c.xsd" node="/xs:schema">
<bindings node="//xs:element[@name='MyHeader']">
<class name="MyHeader" />
</bindings>
</bindings>
</bindings>

然后它提示 xpath 错误...

有人可以帮我解决这个问题吗?谢谢。

最佳答案

您的绑定(bind)文件需要命名空间前缀 xs: 的定义。添加此内容后,可以在三个 xsd 文件之一中重命名 MyHeader。

但是您将无法在三个不同的 XML 架构文件中重命名三个冲突的元素名称。

解决这个问题的一种方法是使用不同的 namespace :这样元素就不会发生冲突。

从两个架构文件中删除此元素的定义是另一种选择。

显然,整个架构设计是有缺陷的,应该使用一种方法重新考虑,即在一个文件中定义公共(public)类型或元素,而其他文件也包括这个公共(public)基础文件。

关于java - xjc 处理重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25118451/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com