Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储列表<;字符串>;使用具有定义名称的XStream_Java_Xstream - Fatal编程技术网

Java 存储列表<;字符串>;使用具有定义名称的XStream

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

我想将一些类存储到xml:

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