gpt4 book ai didi

java - jaxb 删除列表标签

转载 作者:行者123 更新时间:2023-11-29 04:21:18 24 4
gpt4 key购买 nike

我需要编码一个 java 类来获取 xml,但我不知道如何删除生成的标签中的标签。

我有一个带有这种形式的对象列表的类

@XmlRootElement(name = "Element")
public class Element {
private List<Foo> foos;
@XmlElementWrapper("fooList")
public List<Foo> getfoos() {
return foos;
}
public void setFoos(List<Foo> foos) {
this.foos = foos;
}
}

列表的类 Foo 是这样的:

@XmlRootElement
public class Foo {
private String id;
private String code;
@XmlElement
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}

当编码获取 xml 我得到这个:

<Element>
<fooList>
<foos>
<string1>asd</string1>
<string2>qwe</string2>
</foos>
<foos>
<string1>poi</string1>
<string2>lkj</string2>
</foos>
</fooList>
</Element>

但我想在没有标签 foos 的情况下获取它,如下所示:

<Element>
<fooList>
<string1>asd</string1>
<string2>qwe</string2>
<string1>poi</string1>
<string2>lkj</string2>
</fooList>
</Element>

谁能帮帮我?非常感谢!!

最佳答案

你可以这样做:

@XmlRootElement(name = "Element")
@XmlAccessorType(XmlAccessType.FIELD)
public class Element {

@XmlElementWrapper(name = "fooList")
@XmlElements({
@XmlElement(name = "id", type = Id.class),
@XmlElement(name = "code", type = Code.class),
})
private List<FooItem> foos;

public List<FooItem> getfoos() {
return foos;
}
public void setFoos(List<FooItem> foos) {
this.foos = foos;
}
}

然后 Id 和 Code 类看起来很相似:

public class Id implements FooItem {
@XmlValue
private String id;

public Id() {}

public Id(String id) {
this.id = id;
}
}

它们被一个不做太多事情的接口(interface)所限制:

public interface FooItem {  }

此结构将允许您按照您指定的需要编码到 xml 中。

您所拥有的类结构的挑战是类 Foo 有 2 个字段,@XmlValue 只能应用于每个类的一个字段。因此,有 2 个字段“强制”它们代表 @XmlElement,而它们又必须是 xml 元素的子元素。这就是为什么您的 xml 中的每个 Foo 实例都有“中间”foo 元素的原因。

关于java - jaxb 删除列表标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48989182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com