当前位置: 首页 > 知识库问答 >
问题:

解组从两个XSD生成的XML

樊宏义
2023-03-14

这里有两个xsd定义,它们几乎90%相似。下面是第一个xsd的框架

XSD1 :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="apf2doc">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="request"/>
                <xs:element ref="account"/>
                <xs:element ref="financial_transaction"/>
                <xs:element ref="event_data" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

第二个xsd是:

XSD2:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="apf2doc">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="request"/>
                <xs:element ref="account"/>
                <xs:element ref="message"/>
                <xs:element ref="event_data" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

现在,这两个XSD在两个不同的包中生成两组类。我正在使用JAXB来解组收到的XML。XML是从这两个XSD生成的。

在创建JAXB上下文时,它给我带来了错误,因为我相信大多数类都会导致冲突。

下面是错误跟踪:

The element name {}userid has more than one mapping. This problem is related to the     following location: 
at public javax.xml.bind.JAXBElement   
generated.order.ObjectFactory.createUserid(java.lang.String) at   
generated.order.ObjectFactory this problem is related to the following location:
at public javax.xml.bind.JAXBElement   
generated.usage.ObjectFactory.createUserid(java.lang.String) at 
generated.usage.ObjectFactory 

如果有人能给我提出任何解决方案,那就太好了。

谢谢

共有1个答案

张鸿志
2023-03-14

由于两个XML模式具有相同名称和命名空间的全局元素,因此无法在两个模型上创建一个JAXBContext。您可以执行以下操作之一:

  1. 为每个模型创建一个单独的JAXBContext
  2. 使用名称空间来区分这两种XML模式
 类似资料:
  • 问题内容: 我有一个XSD文件,我也想从中生成C#和Java类。 我首先根据我的类所在的C#名称空间在XSD中设置名称空间。生成(使用Microsoft工具)效果很好,并且序列化效果很好,我可以针对XSD对其进行验证- 完美。 现在,我想用JAXB创建Java类。问题在于将要创建的类与C#中的类具有不同的包结构。因此,当我将XSD名称空间设置为java的包结构时,它可以正常工作。我可以序列化和验证

  • 有没有什么方法可以从wsdl生成xsd。任何链接或工具也可以。最简单的方法是什么?

  • 与JAXB为给定XSD生成JAXB类类似,Jackson是否提供了从XSD或JSON生成Jackson类的实用程序。 JAXB类geberator已经生成了一组为XSD模式定义的类。例如,对于多态类型,JAXB具有以下注释,以基于XML元素名称来标识名称。 是否可以在杰克逊中创建类似的类。即,基于XML元素名称来标识类型。

  • 给定两个数组,其中数组1包含变量,数组2包含变量的值,我希望得到这两个数组的所有可能组合,例如: 数组可以容纳尽可能多的变量,也可以容纳。 所需输出: 我尝试了一种递归方法: 我希望能够将每一行正确的内容保存为中的一个元素,但首先我想知道如何正确打印每一行。 编辑:第二个数组不是常量,它在每个变量之间不同: 显然,这在递归中行不通,因为我需要将每个数组与变量数组一起发送,我通过创建一个对象来实现这

  • 问题内容: 我想知道是否有一种方法可以在我拥有数据和标签的情况下自动从XSD架构生成XML文件。我想在python / java中做到这一点。似乎很有可能,但是我找不到任何允许我执行此操作的库。我正在寻找一个相当快速的解决方案。 问题答案: 查看适用于与JAXB相似的Python工具的pyXSD。 XSD用于创建Python类。Python对象用于发出XML。

  • 问题内容: 有人知道如何从现有的XML模式(XSD文件)生成JSON模式吗?有没有可用的工具? 问题答案: 免责声明 :我是Jsonix的作者,Jsonix是一个功能强大的开源XML <-> JSON JavaScript映射库。 今天,我发布了具有新JSON Schema生成功能的新版本的Jsonix Schema Compiler 。 让我们以采购订单模式为例。这是一个片段: 您可以使用提供的