gpt4 book ai didi

java - 您可以编码没有父标签的对象吗?

转载 作者:行者123 更新时间:2023-12-02 06:18:58 25 4
gpt4 key购买 nike

我有以下类(class)。编码时,我想省略“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 来完成吗?”。只需检查这个question (not the answer) ,我不明白他是如何仅使用 JAXB 进行编码并且没有编写根元素的。这正是我想要的。

最佳答案

因此,您不希望将对象编码到单个 XML 子树,而是编码到 XML 片段,即没有父对象的 sibling 列表。我相信 Jaxb 本身无法实现这一目标。但是您可以序列化为某种中间形式并对其进行处理。例如,您可以创建自己的 SAX ContentHandler 并让该处理程序计算深度并仅委托(delegate)非零嵌套深度的事件。

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);
}

}

关于java - 您可以编码没有父标签的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727084/

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