gpt4 book ai didi

java - 通过@XmlPath MOXy 注释解码嵌套集合

转载 作者:行者123 更新时间:2023-11-30 09:35:48 29 4
gpt4 key购买 nike

给定以下 XML 结构:

<root>
<data>x</data>
<details>
<some_other_element>...</some_other_element>
<collection>
<element><a>1</a></element>
<element><a>2</a></element>
<element><a>3</a></element>
<collection>
</details>
</root>

我如何使用 MOXy 将其解码为一个基本扁平的 POJO?我尝试了这种方法(为简洁起见省略了 getter 和 setter):

@XmlRootElement(name = "root")
class Root {
@XmlElement
private String data;

@XmlElement
@XmlPath("details/some_other_element")
private String someOtherElement;

@XmlPath("details")
@XmlElementWrapper(name = "collection")
@XmlElement(name = "element")
private Collection<Element> elements;
}

class Element {
@XmlElement
private String a;
}

不幸的是,这只是将一个未初始化的添加到 elements Collection 。我想避免必须声明 Details类(确实有效)因为它打破了另一个 @XmlPath以下元素的映射 <details> .

我已验证 MOXy 确实已加载(如在 jaxb.properties 中声明的那样)。

有什么想法吗?

最佳答案

尝试将包装标签和元素添加到 @XmlPath 而不是使用 @XmlElementWrapper:

@XmlPath("details/collection/element")
@XmlElement(name = "element")
private Collection<Element> elements;

我认为您甚至可以保留 @XmlElementWrapper 注释,以防将来更改 jaxb 提供程序。


以下是您的用例所需的最少注释:

package forum11153599;

import java.util.Collection;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement
class Root {
@XmlElement
private String data;

@XmlPath("details/some_other_element/text()")
private String someOtherElement;

@XmlPath("details/collection/element")
private Collection<Element> elements;

}

关于java - 通过@XmlPath MOXy 注释解码嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153599/

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