使用带父子的Jaxb的Xml排序

时间:2014-05-07 07:23:27

标签: java xml jaxb2

我正在使用spring rest模板与使用wcf(使用xml)编写的rest服务进行交互。

我有一个名为Rule的实体类,它有一个公共字段和一个包含一些特定字段的子类CustomRule。

WCF服务期望按字母顺序排列xml元素,我尝试在我的基类和子类上使用@XmlAccessorOrder,但生成的xml按排序顺序具有基类字段,排序顺序包含子类字段,但xml中的所有元素都未排序

即。 如果规则有字段S,A,B

CustomRule有Z,C

我希望xml中有A,B,C,S,Z顺序,

而是我得到A,B,S,C,Z。

有人可以帮忙吗?

是否可以根据XmlElement类型中的值而不是类中的varibale名称来命令xml元素?

1 个答案:

答案 0 :(得分:0)

您无法在XML中订购,但您可以从xml进行xslt转换:Transform From one JAXB object to another using XSLT template

当您编写xslt模板时,您可以对要排序的元素应用sort tagSort XML nodes in alphabetical order using XSL

按名称排序的XSLT示例:

<xsl:template match="element_list">
    <xsl:apply-templates select="elements" />
</xsl:template>

<xsl:template match="elements">
    <table>
   <tbody>
          <xsl:apply-templates select="element">
             <xsl:sort select="name" />
          </xsl:apply-templates>
       </tbody>
    </table>
</xsl:template>

XML文件:

<element_list>
    <element>
         <name>Foo</name>
    </element>
    <element>
         <name>Bar</name>
    </element>
    <element>
         <name>WWW</name>
    </element>
    <element>
         <name>AAA</name>
    </element>
</element_list>

您将获得一张包含以下订单的表格:AAA,Bar,Foo,WWW