gpt4 book ai didi

java - 如何反序列化java SimpleXML中的嵌套对象

转载 作者:行者123 更新时间:2023-11-30 07:57:03 24 4
gpt4 key购买 nike

我有以下 xml,我想用 simpleXML 解析它。

<programme start="20161107190000 GMT+04:00" stop="20161107200000 GMT+04:00" channel="001">
<title lang="en_GB">Foo</title>
<desc lang="en_GB">Foobarbaz</desc>
</programme>
<programme start="20161107200000 GMT+04:00" stop="20161107203000 GMT+04:00" channel="001">
<title lang="en_GB">JLS</title>
<desc lang="en_GB">The Java Language Specification</desc>
</programme>

有以下内容

@Root
public class Programme {

@Attribute(name = "channel", required = false)
private String channel;

@Attribute(name = "start", required = false)
private String start;

@Attribute(name = "stop", required = false)
private String stop;

@Element(name = "title", required = false)
private Title title;

@Element(name = "desc", required = false)
private String desc;

public Programme(String channel, String start, String stop, String title, String desc) {
this.channel = channel;
this.start = start;
this.stop = stop;
this.title = title;
this.desc = desc;
}

public String getChannel() {
return channel;
}

public void setChannel(String channel) {
this.channel = channel;
}

public String getStart() {
return start;
}

public void setStart(String start) {
this.start = start;
}

public String getStop() {
return stop;
}

public void setStop(String stop) {
this.stop = stop;
}

public Title getTitle() {
return title;
}

public void setTitle(Title title) {
this.title = title;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}

@Root(name = "title")
public class Title {

@Attribute
private String lang;

private String text;

public Title(String lang, String text) {
this.lang = lang;
this.text = text;
}

public String getLang() {
return lang;
}

public void setLang(String lang) {
this.lang = lang;
}

@Text
public String getText() {
return text;
}

@Text
public void setText(String text) {
this.text = text;
}
}

}

给我错误 org.simpleframework.xml.core.ConstructorException: Can not construct inner class

最佳答案

有几件事需要注意。

1) 如果您在内部元素中有嵌套类的属性,则嵌套类必须是static

2) 为内部类定义变量必须注释如下

@Element(name = "title", type = Title.class, required = false)
private Title title;

3) 在构造函数内部他们应该实例化一个空类

this.title = new Title();

这是一个完整的工作版本:

@Root
public class Programme {


@Attribute(name = "channel", required = false)
private final String channel;

@Attribute(name = "start", required = false)
private final String start;

@Attribute(name = "stop", required = false)
private final String stop;


@Element(name = "title", type = Title.class, required = false)
private Title title;

@Element(name = "desc", type = Desc.class, required = false)
private Desc desc;

public Programme(
@Attribute(name = "channel") String channel,
@Attribute(name = "start") String start,
@Attribute(name = "stop") String stop
) {
this.channel = channel;
this.start = start;
this.stop = stop;
this.title = new Title();
this.desc = new Desc();
}

public Title getTitle() {
return title;
}

public void setTitle(Title title) {
this.title = title;
}

public Desc getDesc() {
return desc;
}

public void setDesc(Desc desc) {
this.desc = desc;
}


@Root(name = "title")
public static class Title {
public String text;
@Attribute(name = "lang")
private String lang;

@Text
public String getText() {
return text;
}

@Text
public void setText(String text) {
this.text = text;
}

public String getLang() {
return lang;
}
}

@Root(name = "desc")
public static class Desc {
public String text;
@Attribute(name = "lang")
private String lang;

@Text
public String getText() {
return text;
}

@Text
public void setText(String text) {
this.text = text;
}

public String getLang() {
return lang;
}
}

}

关于java - 如何反序列化java SimpleXML中的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41607094/

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