【问题标题】:JAXB changes XML order on server but not on localhostJAXB 更改服务器上的 XML 顺序,但不更改 localhost
【发布时间】:2012-12-07 00:33:21
【问题描述】:

我有一个格式如下的 XML:

<products>
     <product>
          <id>1</id>
          <name>a</name>
          <price>24.5</price>
     </product>
     <product>
          <id>2</id>
          <name>b</name>
          <price>3.75</price>
     </product>
     .
     .
     .
</products>

我正在使用 JAXB 从 XML 中获取数据。

这就是 xsd 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="products">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="product"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="product">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="id"/>
        <xs:element ref="name"/>
        <xs:element ref="price"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="id" type="xs:integer"/>
  <xs:element name="name" type="xs:NCName"/>
  <xs:element name="price" type="xs:decimal"/>
</xs:schema>

我的问题是,在本地主机上,我像在 XML 中一样一一获取产品(id 1 比 id 2 等)但是当我将它上传到我的亚马逊服务器(linux)时,我得到不同的排序,我无法理解为什么。

有人解释一下吗?

【问题讨论】:

  • 不清楚原因。如果你发布你的 POJO,它会更容易调查。

标签: java xml-parsing jaxb


【解决方案1】:

默认情况下JAXB (JSR-222) 实现不定义顺序。这意味着 Java VM 之间的行为可能不同。有几个选项可用于定义订单。

选项 #1 - @XmlType(propOrder={"foo", "bar})

在类级别使用此注释允许您指定查看编组为 XML 的 XML 元素的顺序。

选项 #2 - @XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)

您可以在类级别使用@XmlAccessorOrder 注释来指定您希望查看按字母顺序编组为 XML 的 XML 元素。

【讨论】:

  • 有没有办法保持 xml 排序?我根本不想对元素进行排序,我只想按照它们到达 xml 的顺序一个一个地读取元素。
  • @ItayD - 你的意思是product 集合的内容不同?如果是这样,您使用的是什么类型的集合类?
  • 内容没有什么不同,只是排序而已。假设在 XML 中,具有 2 的产品在具有 1 的产品之前,所以在服务器端我得到 1 在 2 这不是 XML 中的顺序。我将 XSD 添加到我的问题中,以便您查看该集合。
  • 产品的 Java 属性类型是什么?
  • 我有: List productsList = new ArrayList();我将每个产品添加到该列表中。但即使在将其添加到列表之前,我也将 id 写入了一个日志文件,在那里我看到排序不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2018-02-06
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多