Java XML Freemarker两张哈希图合二为一的sequnece。

问题描述 投票:1回答:1

我想生成两个带注释的C枚举。对应的数据存储在一个XML文件中。

因此,我使用Java从XML数据中读取两个标签,ID和Comment。ID和Comment分别存储在两个独立的hashmaps中。这两个hashmaps都是一个(相同的)对象数组列表的一部分。我也有setter和getter函数,我能够分别生成Comment和ID。但是,我不能以相同的顺序生成ID和Comment。

**File 0:**
Class example {
   private Map<String, String> idList    = new HashMap<String, String>();
   private Map<String, String> cmtList   = new HashMap<String, String>();

   public Map<String, String> getIdList() {    
      return this.idList;
   };
   public Map<String, String> getCmtList() {    
      return this.cmtList;
  };
}

File 1:
List<example> Freemarker_arr = new ArrayList< example >();

public List< example > getXmlModes() {
    return Freemarker_arr;
}


File 2: 
<#list model.getXmlModes() as i>
<#list i.getIdList()?keys as id>
typedef enum 
{
   ${"ABC_ID" + id},            // This one works fine. Ids are generated.
} value_st;
</#list>
</#list>

<#list model.getXmlModes() as i>
<#list i.getCmtList()?keys as cmt>
typedef enum 
{
    ${cmt},                 // This one works also fine. Comments are generated.
} value_st;
</#list>
</#list>

问题:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是:我的问题是

I want to generate:
// Comment 1
// Enum 1

// Comment 2
// Enum 2

代码:

<#list model.getXmlModes() as i>
<#list i.getIdList()?keys as id>
<#list i.getCmtList()?keys as cmt>
// ${cmt}
typedef enum 
{
    ${"ABC_ID" + id},
} value_st;
</#list>
</#list>
</#list>

我从xml文件中共读取了2个ID和2个Comment。下面的代码将生成四次......

生成的输出。

// Comment 1
// Enum 1

// Comment 1
// Enum 2

// Comment 2 
// Enum 1

// Comment 2 
// Enum 2

问题:我的代码有什么问题?

java c xml freemarker
1个回答
0
投票

你应该 #list 只有其中一个列表,而从另一个列表中按索引获取元素。在你的例子中,这些列表就像 someMap?keys,有了它就像。

<#assign bKeys = bMap?keys>
<#list aMap?keys as aKey>
  Key from aMap: ${aKey}
  Key from bMap: ${bKeys[aKey?index]}
</#list>

关于你的代码有什么问题 如果你把这两个 #list-互相成,那么你就会把整个内层列表的每个元素都列在外层列表中。

© www.soinside.com 2019 - 2024. All rights reserved.