我想生成两个带注释的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
问题:我的代码有什么问题?
你应该 #list
只有其中一个列表,而从另一个列表中按索引获取元素。在你的例子中,这些列表就像 someMap?keys
,有了它就像。
<#assign bKeys = bMap?keys>
<#list aMap?keys as aKey>
Key from aMap: ${aKey}
Key from bMap: ${bKeys[aKey?index]}
</#list>
关于你的代码有什么问题 如果你把这两个 #list
-互相成,那么你就会把整个内层列表的每个元素都列在外层列表中。