Java 通过@XmlPath MOXy注释解组嵌套集合
给定以下XML结构:Java 通过@XmlPath MOXy注释解组嵌套集合,java,jaxb,eclipselink,moxy,Java,Jaxb,Eclipselink,Moxy,给定以下XML结构: <root> <data>x</data> <details> <some_other_element>...</some_other_element> <collection> <element><a>1</a></element> <element><a>2</a
<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>
x
...
1.
2.
3.
我如何使用MOXy将其解组为一个基本平坦的POJO?我尝试了这种方法(为了简洁起见,省略了getter和setter):
@XmlRootElement(name=“root”)
类根{
@XmlElement
私有字符串数据;
@XmlElement
@XmlPath(“细节/某些其他元素”)
私有字符串someOtherElement;
@XmlPath(“详细信息”)
@xmlementwrapper(name=“collection”)
@xmlement(name=“element”)
私人收藏元素;
}
类元素{
@XmlElement
私人字符串a;
}
不幸的是,这只是将一个未初始化的元素添加到集合中。我希望避免必须声明详细信息
类(它确实有效),因为这会破坏@XmlPath
下元素的其他
映射
我已经验证了MOXy是否已实际加载(如jaxb.properties中声明的)
有什么想法吗?尝试将包装标签和元素添加到@XmlPath
而不是使用@xmlementwrapper
:
@XmlPath("details/collection/element")
@XmlElement(name = "element")
private Collection<Element> elements;
+我是莫西的领导,你的回答是正确的。我希望您不介意我添加了一个Root
类的示例。非常好,效果非常好(尽管我很确定我以前也尝试过这个变体;-)!
@XmlPath("details/collection/element")
@XmlElement(name = "element")
private Collection<Element> elements;
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;
}