我正在使用handelBarsJS将JSON转换为XML。
我有这个例子我正在研究:我有一个列表"输出" :
"output":[
{
"name":"Name1",
"URI":"Link1",
"Ref":"ref1"
}, {
"name":"Name2",
"URI":"Link2",
"Ref":"ref2"
}, {
"name":"Name3",
"URI":"Link3"
}, {
"name":"Name4",
"URI":"Link4"
}
],
我有这个XML模板
<!-- output -->
{{#output}} {{^Ref}}
<outputs>
<OutputList>
{{/Ref}} {{/output}}
{{#output}}{{^Ref}}
<output name="{{name}}" xlink:href="{{URI}}" />
{{/Ref}} {{/output}}
{{#output}} {{^Ref}}
</OutputList>
</outputs>
{{{/Ref}} {{/output}}
我想要做的只是检索输出的元素,这些元素必须具有属性&#34; Ref&#34;,我想要的输出XML格式的示例:
<!-- output -->
<outputs>
<OutputList>
<output name="Name3" xlink:href="Link3" />
<output name="Name4" xlink:href="Link4" />
</OutputList>
</outputs>
如果只有具有属性Ref的Output元素,我需要在XML文件中不显示任何内容,因为我需要根据XSD架构对其进行验证。
我需要在Handelbars对每个输出元素进行迭代时发现那里有一个带有ref属性的输出元素,它会添加这个只有一次就像在以下情况下打破/退出循环:
<outputs><OutputList>
</OutputList> </outputs>
答案 0 :(得分:2)
您的模板似乎非常复杂,您只需要一个each
循环和unless
帮助。
模板:
<script id="template" type="text/x-handlebars-template">
<outputs>
<OutputList>
{{#each output}}
{{#unless Ref}}
<output name="{{name}}" xlink:href="{{URI}}" />
{{/unless}}
{{/each}}
</OutputList>
</outputs>
</script>
JavaScript的:
var json = {
"output":[
{
"name":"Name1",
"URI":"Link1",
"Ref":"ref1"
}, {
"name":"Name2",
"URI":"Link2",
"Ref":"ref2"
}, {
"name":"Name3",
"URI":"Link3"
}, {
"name":"Name4",
"URI":"Link4"
}
]
};
var source = $("#template").html();
var template = Handlebars.compile(source);
var xml = template(json);
输出(var xml
):
<outputs>
<OutputList>
<output name="Name3" xlink:href="Link3" />
<output name="Name4" xlink:href="Link4" />
</OutputList>
</outputs>
小提琴(见控制台):http://jsfiddle.net/zba1g0dv/5/
答案 1 :(得分:0)
我在将XML模板应用到我的JSON对象之前,通过简单地删除带有ref属性的Outputs元素来解决这个问题。
这就是我的工作XML模板:
<!-- output -->
{{#if output}}
<outputs>
<OutputList>
{{/if}}
{{#output}}
<output name="{{name}}" xlink:href="{{URI}}" />
{{/output}}
{{#if output}}
</OutputList>
</outputs>
{{/if}}
希望这有助于像我这样的新手。