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

JAXB没有按照预期解析.xsd。C#从同一文件自动生成

闻人河
2023-03-14

我对JAXB当前从.xsd文件生成java对象的方式遇到了一些麻烦。下面是我正在使用的.xsd文件中的一段代码。这段代码的目的是要有一个LogicalDevices的列表,这些LogicalDevices是包含各种信息的对象。

                        <xs:element name="LogicalDeviceList">
                            <xs:annotation>
                                <xs:documentation>List of all LogicalDevices currently added for the application</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="LogicalDevice" minOccurs="0" maxOccurs="unbounded">
                                        <xs:annotation>
                                            <xs:documentation>An added logical device</xs:documentation>
                                        </xs:annotation>
                                        <xs:complexType>
                                            <xs:attribute name="DeviceDefinitionId" use="required">
                                                <xs:annotation>
                                                    <xs:documentation>The DeviceDefinitionId of the Logical device</xs:documentation>
  .......... Other LogicalDevice Information

当前,JAXB解析器创建一个对象,其中LogicalDevices不是LogicalDevices的列表,而LogicDevices返回DeviceDefinitionId的列表。

由于我正在接收和解封的XML无论如何都无法更改,有没有办法解决这个问题?是否只需将.xsd文件更改为以这样的方式读取就可以了

更新:下面的修改不起作用。2013年5-24

                        <xs:element name="LogicalDeviceList" minOccurs="0" maxOccurs="unbounded">
                            <xs:annotation>
                                <xs:documentation>List of all LogicalDevices currently added for the application</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="LogicalDevice">
                                        <xs:annotation>
                                            <xs:documentation>An added logical device</xs:documentation>
                                        </xs:annotation>
                                        <xs:complexType>
                                            <xs:attribute name="DeviceDefinitionId" use="required">
                                                <xs:annotation>
                                                    <xs:documentation>The DeviceDefinitionId of the Logical device</xs:documentation>

如果是的话,那么为什么C#.xsd解析器按照预期从原始xsd生成对象和列表,而JAXB却没有。

共有1个答案

闻人博
2023-03-14

对于XML架构片段:

<xs:element name="LogicalDeviceList">
    <xs:annotation>
        <xs:documentation>List of all LogicalDevices currently added for the application</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element name="LogicalDevice" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>An added logical device</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:attribute name="DeviceDefinitionId" use="required">
                        <xs:annotation>
                            <xs:documentation>The DeviceDefinitionId of the Logical device</xs:documentation>
                        ...   

您将获得如下所示的类结构,其中LogicalDeviceList类有一个LogicalDevice实例的集合。

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "logicalDevice"
    })
    public static class LogicalDeviceList {

        @XmlElement(name = "LogicalDevice")
        protected List<LogicalDeviceList.LogicalDevice> logicalDevice;

JAXB可能与C#生成的内容不完全匹配,但它是XML模式的一种完全可以接受的表示形式。

 类似资料:
  • 我正在开发一个graqphqlapi,它通过Mongoose从MongoDB获取数据。现在我遇到的问题是GraphQL不使用查询来解析字段,而是使用字段解析程序,因为没有设置ID,所以字段解析程序无法工作。 TypeDefs: 解析程序: 功能: 查询: 结果:

  • B/src/main/gen pom.xml 我想在B项目中从XSD生成类,它存在于一个项目中 在B项目的pom.xml中,我有:

  • 我有我的xml模式定义如下 我使用maven-jaxb2-plugin根据这个xsd生成Java类。 生成代码后,我发现所有元素都有@xmlement注释(required=true)。为什么?我有许多minOccurs=“0”元素。为什么元素上总是添加required=true。

  • 我是JavaFX新手,在使用setOnMouse点击方法时遇到了问题。在下面的代码中,我尝试在嵌套循环中添加一个事件处理程序,为创建的每个矩形分配一个事件处理程序,单击鼠标后,该事件处理程序将矩形变为灰色。它似乎根本不起作用,我不知道为什么。我是否遗漏了需要添加的内容? 编辑:这是FXML内容,根节点只是一个空白窗格 此外,自定义屏幕类定义了循环中使用的2d座位数组

  • 问题内容: 我有一个巨大的QuickBooks SDK .XSD模式文件,该文件定义了我可以从QuickBooks发送/接收的XML请求/响应。 我希望能够轻松地从这些.XSD文件生成Java类,然后将其用于将XML编组为Java对象,以及将Java对象编组为XML。 是否有捷径可寻…? 理想情况下,它在运行时不需要基本Java发行版外部的任何库。但是我很灵活 问题答案: JAXB确实可以满足您的

  • myType也被定义为complexType。然后得到生成的类MyResponse.java和Reference.java。我可以通过以下方式分配“引用”的值: 而且奏效了。 现在我只是删除了maxOccurs=“unbounded”,它不再起作用了。响应不再是List类型,而是JaxBelement类型。我试着用: 谁能告诉我,当它不是一个列表时,什么是正确的做法?