Java 存储列表<;字符串>;使用具有定义名称的XStream
我想将一些类存储到xml:Java 存储列表<;字符串>;使用具有定义名称的XStream,java,xstream,Java,Xstream,我想将一些类存储到xml: XStream xstream = new XStream(new DomDriver()); List<String> modules = new ArrayList<String>(); modules.add("mod1"); modules.add("mod2"); ModulesConfig modulesConfig = new ModulesConfig(modules); xstrea
XStream xstream = new XStream(new DomDriver());
List<String> modules = new ArrayList<String>();
modules.add("mod1");
modules.add("mod2");
ModulesConfig modulesConfig = new ModulesConfig(modules);
xstream.processAnnotations(ModulesConfig.class);
log.info(xstream.toXML(modulesConfig));
XStream XStream=newxstream(newdomdriver());
列表模块=新的ArrayList();
模块。添加(“模块1”);
模块。添加(“模块2”);
ModuleConfig ModuleConfig=新的ModuleConfig(模块);
processAnnotations(moduleConfig.class);
log.info(xstream.toXML(moduleconfig));
类模块配置:
@XStreamAlias("modules-config")
public class ModulesConfig {
@XStreamAlias("moduleName")
private List<String> moduleNames;
public ModulesConfig(List<String> moduleNames) {
this.moduleNames = moduleNames;
}
public List<String> getModuleNames() {
return moduleNames;
}
public void setModuleNames(List<String> moduleNames) {
this.moduleNames = moduleNames;
}
}
@XStreamAlias(“模块配置”)
公共类模块配置{
@XStreamAlias(“模块名称”)
私有列表模块名称;
公共模块配置(列出模块名称){
this.moduleNames=moduleNames;
}
公共列表getModuleNames(){
返回模块名;
}
public void setModuleNames(列出moduleNames){
this.moduleNames=moduleNames;
}
}
结果:
<modules-config>
<moduleName>
<string>mod1</string>
<string>mod2</string>
</moduleName>
</modules-config>
mod1
mod2
但我希望元素名为“moduleName”。如何配置xstream或必须向类添加哪些注释?我想要这样的结果:
<modules-config>
<moduleNames>
<moduleName>mod1</moduleName>
<moduleName>mod2</moduleName>
</moduleNames>
</modules-config>
mod1
mod2
这不会得到您要求的准确结果,但看起来更干净:
@XStreamImplicit(itemFieldName="moduleName")
private List<String> moduleNames;
@XStreamImplicit(itemFieldName=“moduleName”)
私有列表模块名称;
产生的结果将是:
<modules-config>
<moduleName>mod1</moduleName>
<moduleName>mod2</moduleName>
</modules-config>
mod1
mod2
我不太了解XSteam框架,但我认为它与JAXB非常相似。你可以这样做
类模块图
@XmlRootElement(name="moduleConfig")
@XmlAccessorType(XmlAccessType.FIELD)
public class ModuleConfig {
List<ModuleName> moduleNames;
public ModuleConfig() {
moduleNames = new ArrayList<ModuleName>();
moduleNames.add(new ModuleName("mod1"));
moduleNames.add(new ModuleName("mod2"));
}
}
Wich将生成如下输出
<moduleConfig>
<moduleNames>
<moduleName>mod1</moduleName>
</moduleNames>
<moduleNames>
<moduleName>mod2</moduleName>
</moduleNames>
</moduleConfig>
mod1
mod2
您可以将模块名称定义为Bean,如下所示
@XStreamAlias("moduleNames")
public class ModuleNames{
@XStreamImplicit(itemFieldName="moduleName")
private List<String> moduleNames;
public List<String> getModuleNames() {
return moduleNames;
}
public void setModuleNames(List<String> moduleNames) {
this.moduleNames = moduleNames;
}
}
//then add the ModuleNames as The List<String> and hide the List Tag
@XStreamAlias("modules-config")
public class ModulesConfig {
@XStreamAlias("moduleNames")
private ModuleNames moduleNames;
public ModulesConfig(List<String> moduleNames) {
this.moduleNames = moduleNames;
}
public List<String> getModuleNames() {
return moduleNames.getModuleNames();
}
public void setModuleNames(List<String> moduleNames) {
this.moduleNames.set(moduleNames);
}
}
@XStreamAlias(“模块名称”)
公共类模块名称{
@XStreamImplicit(itemFieldName=“moduleName”)
私有列表模块名称;
公共列表getModuleNames(){
返回模块名;
}
public void setModuleNames(列出moduleNames){
this.moduleNames=moduleNames;
}
}
//然后添加ModuleName作为列表并隐藏列表标记
@XStreamAlias(“模块配置”)
公共类模块配置{
@XStreamAlias(“模块名称”)
私有模块名称模块名称;
公共模块配置(列出模块名称){
this.moduleNames=moduleNames;
}
公共列表getModuleNames(){
返回moduleNames.getModuleNames();
}
public void setModuleNames(列出moduleNames){
this.moduleNames.set(moduleNames);
}
}
Read No可能重复,我需要一个moduleNames节点。是的,但是如何获取标记?
@XStreamAlias("moduleNames")
public class ModuleNames{
@XStreamImplicit(itemFieldName="moduleName")
private List<String> moduleNames;
public List<String> getModuleNames() {
return moduleNames;
}
public void setModuleNames(List<String> moduleNames) {
this.moduleNames = moduleNames;
}
}
//then add the ModuleNames as The List<String> and hide the List Tag
@XStreamAlias("modules-config")
public class ModulesConfig {
@XStreamAlias("moduleNames")
private ModuleNames moduleNames;
public ModulesConfig(List<String> moduleNames) {
this.moduleNames = moduleNames;
}
public List<String> getModuleNames() {
return moduleNames.getModuleNames();
}
public void setModuleNames(List<String> moduleNames) {
this.moduleNames.set(moduleNames);
}
}