我正在使用freemarker将xml转换为json。我的Xml正在关注
<ResponseMetadata>
<ResponseCode>HS000000</ResponseCode>
<ResponseDescriptionText>Success</ResponseDescriptionText>
</ResponseMetadata>
我正在使用以下ftl进行转换。
<#assign data = xml['child::node()']>
{
"ResponseMetadata":{
<#if (data.ResponseCode)?has_content>"ResponseCode":"${data.ResponseCode}",</#if>
<#if (data.ResponseDescriptionText)?has_content>"ResponseDescriptionText":"${data.ResponseDescriptionText}",</#if>
<#if (data.TDSResponseDescriptionText)?has_content>,"TDSResponseDescriptionText":"${data.TDSResponseDescriptionText}" </#if>
}
}
由于在XML源中不存在第三个元素,因此我得到了以下输出,其中第二个元素之后打印了逗号(,)。
"ResponseMetadata":{
"ResponseCode":"HS000000",
"ResponseDescriptionText":"Success" ,
}
}
如果未找到如下元素,我希望输出不带逗号:
"ResponseMetadata":{
"ResponseCode":"HS000000",
"ResponseDescriptionText":"Success"
}
}
我的问题是当源xml中不存在下一个元素时,如何省略逗号。谢谢
答案 0 :(得分:1)
如果只想将XML更改为JSON,则可以简化代码,列出xml中的所有节点并使用let newDiv = document.createElement("DIV");
newDiv.setAttribute("id", "hide");
document.body.appendChild(newDiv);
document.getElementById("hide").style.zIndex = "9";
document.getElementById("hide").style.width = "100%";
document.getElementById("hide").style.height = "100%";
document.getElementById("hide").style.backgroundImage = "url('https://s3.amazonaws.com/cdn-origin-etr.akc.org/wp-content/uploads/2018/05/22224952/beagle-puppy-in-large-cushion-chair.jpg')";
document.getElementById("hide").style.backgroundRepeat = "no-repeat";
document.getElementById("hide").style.backgroundSize = "cover";
document.getElementById("hide").style.top = "0";
document.getElementById("hide").style.position = "fixed";
document.body.style.margin = "0";
document.body.style.padding = "0";
:
sep
结果:
<#assign data = xml['child::node()']/>
{
"ResponseMetadata":{
<#list data?children as field>
"${field?node_name}":"${field}"<#sep>,</#sep>
</#list>
}
}
寻找XML here的更多freemarker内置函数
答案 1 :(得分:0)
最后,我能够解决这个问题。解决方案是声明一个序列并添加具有内容并解析为列表的元素。解决方案代码如下
<#assign data = xml['child::node()']>
{
"ResponseMetadata":{
<#assign y = []>
<#if (data.ResponseCode)?has_content>
<#assign var1>"ResponseCode":"${data.ResponseCode}"</#assign>
<#assign y = y + [ var1 ] />
</#if>
<#if (data.ResponseDescriptionText)?has_content>
<#assign var2>"ResponseDescriptionText":"${data.ResponseDescriptionText}"</#assign>
<#assign y = y + [ var2 ] />
</#if>
<#if (data.TDSResponseDescriptionText)?has_content>
<#assign var3>"TDSResponseDescriptionText":"${data.TDSResponseDescriptionText}" </#assign>
<#assign y = y + [ var3 ] />
</#if>
<#list y as x>
${x}<#sep>,</#sep>
</#list>
}
}