使用带有XML的胡子模板

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

我正在使用JMustache,但我想这个问题对于所有实现都是一样的。

我正在使用Mustache生成XML文件。当列表为空时,我不希望显示父标记。当列表不为空时,我希望父标记显示一次。我想知道胡子模板应该是什么样子。

例如,我可能需要根据数据输入生成两个XML文件中的任何一个:

<class>
    <name>Basketweaving</name>
    <students>
        <student>Joe Smith</student> 
        <student>Sally Smithers</student>
    </students>
</class>

要么:

<class>
    <name>Basketweaving at a bad time</name>
</class>

我遇到的问题是如果我像这样定义我的模板:

<class>
   <name>{{className}}</name>
   <students>
    {{#students}}
      <student>{{studentName}}</student>
    {{/students}}
   </students>
<class>

然后空课仍然有学生块。

EG

  <class>
        <name>Basketweaving at a bad time</name>
        <students>
</students>
    </class>

如果我移动循环:

<class>
   <name>{{className}}</name>
   {{#students}}
   <students>
      <student>{{studentName}}</student>
   </students>
   {{/students}}
<class>

我将在第一个例子中重复学生:

EG

<class>
    <name>Basketweaving</name>
    <students>
        <student>Joe Smith</student> 
    </students>
    <students>
        <student>Sally Smithers</student>
    </students>
</class>

那么,做模板以获得我想要的行为的正确方法是什么?

templates mustache
1个回答
0
投票

我找到了自己问题的答案。使用JMustache,模板应该类似于以下内容:

<class>
   <name>{{className}}</name>
   {{#students}}
   {{#-first}}<students>{{/-first}}
      <student>{{studentName}}</student>
   {{#-last}}</students>{{/-last}}
   {{/students}}
<class>

-first和-last是特殊标志,仅在循环的第一次或最后一次迭代时才为真。

因此,上面的代码只会输出<students>,同时循环遍历学生循环中的第一个条目。同样,</students>只会在学生循环输入期间输出。

这意味着如果学生是空列表,则永远不会输出<students> </students>,但是如果有一个或多个条目,则条目将被<students> </students>包围。

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