我有下一节课。在编组时,我想省略标记"config",可以吗?
@XmlRootElement(name = "config")
@XmlAccessorType(XmlAccessType.FIELD)
public static class Config {
@XmlElement(name = "dry-run")
protected Boolean dryRun;
@XmlElementWrapper(name = "filters")
@XmlElement(name = "filter")
protected List<String> filters;
public Boolean isDryRun() {
return dryRun;
}
public void setDryRun(boolean dryRun) {
this.dryRun = dryRun;
}
public List<String> getFilters() {
return filters;
}
}示例:
当前产出:
<Root>
<config xmlns:wf="nspace">
<dry-run>false</dry-run>
<filters>
<filter>
myFilter
</filter>
</filters>
</config>
</Root>期望产出:
<Root>
<dry-run>false</dry-run>
<filters>
<filter>
myFilter
</filter>
</filters>
</Root>更新:
我想知道的是“这只能用JAXB完成吗?”只要检查一下这个问题(不是答案),我就不知道他是如何只使用JAXB封送的,也没有编写任何根元素。这正是我想要的。
发布于 2013-02-06 13:46:06
因此,您希望将对象编组到一个XML子树,而不是一个XML子树,而是一个XML片段,即没有父级的兄弟姐妹列表。我相信Jaxb自己是不可能做到这一点的。但您可以将其序列化为某种中间形式,并对其进行处理。例如,您可以创建自己的SAX ContentHandler,并具有处理程序计数深度,并且只在非零嵌套深度委托事件。
class NoRoot extends XMLFilterImpl {
private int depth;
@Override public void startDocument() throws SAXException
{
depth = 0;
}
@Override public void startElement(String uri, String localName,
String qName, Attributes atts)
throws SAXException
{
if (depth != 0) super.startElement(uri, localName, qName, atts);
++depth;
}
@Override public void endElement(String uri, String localName,
String qName)
throws SAXException
{
--depth;
if (depth != 0) super.endElement(uri, localName, qName);
}
}https://stackoverflow.com/questions/14727084
复制相似问题