通过 Apache freemarker 模板读取 #list 命令中的节点索引号
Read node Index number in #list command by Apache freemarker template
我有一个如图所示的 xml 文件,现在我想用 freeMarker 模板读取它并获得所需的输出
<preDefinedRecipes>
<preDefinedRecipe type="BREAD" name="A" >
<parameterDef ref="SUGAR_QTY" value="3" />
<parameterDef ref="SALT_QTY" value="3" />
<parameterDef ref="OIL_QTY" value="1" />
</preDefinedRecipe>
<preDefinedRecipe type="BREAD" name="B" >
<parameterDef ref="SUGAR_QTY" value="5" />
<parameterDef ref="SALT_QTY" value="7" />
<parameterDef ref="FLOUR_QTY" value="3" />
</preDefinedRecipe>
</preDefinedRecipes>
Op needed:
('A','SUGAR_QTY','3')
('A','SALT_QTY','3')
('A','OIL_QTY','1')
('B','SUGAR_QTY','5')
('B','SALT_QTY','7')
('B','FLOUR_QTY','3')
但我能够生成的输出是
('A','SUGAR_QTY','3')
('A','SALT_QTY','3')
('A','OIL_QTY','1')
('A','SUGAR_QTY','5')
('A','SALT_QTY','7')
('A','FLOUR_QTY','3')
('B','SUGAR_QTY','3')
('B','SALT_QTY','3')
('B','OIL_QTY','1')
('B','SUGAR_QTY','5')
('B','SALT_QTY','7')
('B','FLOUR_QTY','3')
('B','FLOUR_QTY','3')
这是模板
<#list doc.preDefinedRecipes.preDefinedRecipe as PDR>
<#assign Name = PDR.@name>
<#list doc.preDefinedRecipes.preDefinedRecipe.parameterDef as PDEF>
('${PDR[0].@name}','${PDEF.@ref}','${PDEF.@value}')
</#list>
</#list>
我想知道如何读取列表的索引号,这样我就可以像嵌套 for 循环一样进行迭代。
freemarker 的新手,任何指导将不胜感激。提前致谢,
里面的#list
应该是这样的:<#list PDR.parameterDef as PDEF>
.
两个 #list
-s 不以任何方式通信。在您的原始代码中,内部 #list
列出了文档的所有 parameterDef
-s,并且您对文档的每个 preDefinedRecipe
重复执行此操作。
我有一个如图所示的 xml 文件,现在我想用 freeMarker 模板读取它并获得所需的输出
<preDefinedRecipes>
<preDefinedRecipe type="BREAD" name="A" >
<parameterDef ref="SUGAR_QTY" value="3" />
<parameterDef ref="SALT_QTY" value="3" />
<parameterDef ref="OIL_QTY" value="1" />
</preDefinedRecipe>
<preDefinedRecipe type="BREAD" name="B" >
<parameterDef ref="SUGAR_QTY" value="5" />
<parameterDef ref="SALT_QTY" value="7" />
<parameterDef ref="FLOUR_QTY" value="3" />
</preDefinedRecipe>
</preDefinedRecipes>
Op needed:
('A','SUGAR_QTY','3')
('A','SALT_QTY','3')
('A','OIL_QTY','1')
('B','SUGAR_QTY','5')
('B','SALT_QTY','7')
('B','FLOUR_QTY','3')
但我能够生成的输出是
('A','SUGAR_QTY','3')
('A','SALT_QTY','3')
('A','OIL_QTY','1')
('A','SUGAR_QTY','5')
('A','SALT_QTY','7')
('A','FLOUR_QTY','3')
('B','SUGAR_QTY','3')
('B','SALT_QTY','3')
('B','OIL_QTY','1')
('B','SUGAR_QTY','5')
('B','SALT_QTY','7')
('B','FLOUR_QTY','3')
('B','FLOUR_QTY','3')
这是模板
<#list doc.preDefinedRecipes.preDefinedRecipe as PDR>
<#assign Name = PDR.@name>
<#list doc.preDefinedRecipes.preDefinedRecipe.parameterDef as PDEF>
('${PDR[0].@name}','${PDEF.@ref}','${PDEF.@value}')
</#list>
</#list>
我想知道如何读取列表的索引号,这样我就可以像嵌套 for 循环一样进行迭代。 freemarker 的新手,任何指导将不胜感激。提前致谢,
里面的#list
应该是这样的:<#list PDR.parameterDef as PDEF>
.
两个 #list
-s 不以任何方式通信。在您的原始代码中,内部 #list
列出了文档的所有 parameterDef
-s,并且您对文档的每个 preDefinedRecipe
重复执行此操作。