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

JAXB和带有元素列表的属性排序

李博达
2023-03-14

我正在使用JAXB来解封xml文件。这是我的元素特性代码,但是我想在元素特性中有一个特殊的元素顺序,像这样

<feature>
  <name>2D Polynomial Approximation of Log of ConstantQ</name>
  <active>false</active>
  <attribute>50</attribute>
  <attribute>20</attribute>
  <attribute>10</attribute>
  <attribute>10</attribute>
</feature>

我检查了一些@XmlType教程(propOrder = {}),但我找不到一种方法来订购元素列表,如这里的属性元素。

这是我的代码。

@XmlRootElement(name = "feature")
@XmlType(propOrder = {"name", "active","attribute"})
public class Feature{

    String name;

    boolean active;

    List<String> attributes = new LinkedList<String>();

    /**
     * name element of feature element
     * @return
     */
    @XmlElement(name = "name")
    public final String getName(){
        return this.name;
    }

    public final void setName(String name){
        this.name = name;
    }

    /**
     * active element
     * @return
     */
    @XmlElement(name = "active")
    public final boolean getActive(){
        return this.active;
    }

    public final void setActive(boolean active){
        this.active = active;
    }

    /**
     * attribute elements
     * @return
     */
    @XmlElement(name = "attribute")
    public final List<String> getAttributes(){
        return this.attributes;
    }

    public final void setAttributes(List<String> attributes){
        this.attributes = attributes;
    }
}

它总是抛出异常,因为我在propOrder中只定义了一个属性。但是由于属性是多重的,可能是一个或多个,我不知道如何实现它。或者你知道其他排序元素的方法吗

提前感谢您的帮助

共有1个答案

龚运乾
2023-03-14

propOrder基于字段/属性名称,而不是XML元素名称。所以你应该

@XmlType(propOrder = {"name", "active","attributes"})

有关更多信息

    < Li > http://blog . bdoughan . com/2012/02/jaxbs-xmltype-and-proborder . html
 类似资料:
  • 我得到以下错误: 我尝试了以下几种方式,

  • 现在我想从中得到一个,它包含。 我已经试过了(并期望能奏效): 但这与任何内容都不匹配(包含null)。 (我不想更改XML语法。)

  • 我有以下JAXB对象: 我使用JAXB编组程序将对象转换为XML: 它运行平稳,没有任何异常,但是,结果总是缺少元素键。我试图将其改为Attribute,但它也不起作用。以下是输出示例: 我曾尝试将键更改为另一个名称,例如AuthKey,但它仍然缺失。我做错了什么? 编辑我发现了问题,这是因为我的键的值是空的。如果它包含值,则将其写入XML。然而,您能解释一下为什么在XMLElement中,我写了

  • 我是8Java的新手。我有一个A类对象的列表,其中A的结构如下: 现在我有了一个类A的元素L的列表,在这个列表中,我想用inactive=false更新一个名为name="test "的元素。 我可以通过编写for循环并创建一个新列表来非常轻松地做到这一点。 但是我如何使用Java8流API呢?

  • 问题内容: 我有以下XML: 我有以下Java类将其映射到: 当我尝试与解组 我得到这个错误 我需要参数同时具有’attr’属性和内容,所以我在做什么错呢? 问题答案: 默认情况下, JAXB(JSR-222) 实现将公共属性(获取/设置方法)和带注释的字段视为已映射(和分开)。默认映射是这样,因此您的属性将被视为以此方式映射。 解决方案1 由于您要注释字段,因此需要在类中添加。 解决方案#2 注

  • null 编辑:一个附加的非功能性需求是,测试应该可以很容易地通过附加的约束来扩展。在Hamcrest中,表达附加约束是相当容易的,例如。 依赖于列表索引的测试必须重新编号。在本例中,使用自定义条件的测试必须重写完整的条件(请注意,中的约束不限于子字符串检查)。