xml标签名对应HL7路径位置,原理使用freeMaker递归实现。
原子服务hl7ToXml.ftl
<#assign pleve=leve/>
<#list list as HL7CName>
<#if HL7CName==''>
<#else>
<#assign i=pleve-leve>
<#if leve==1>
<#assign isegment=segment+'-'+(HL7CName.getElementIndex()+1)/>
<#elseif i gt 0>
<#list 1..i as xunhuan>
<#assign isegment=isegment?substring(0,isegment?last_index_of("-"))/>
</#list>
<#assign isegment=isegment+'-'+(HL7CName.getElementIndex()+1)/>
<#else>
<#assign isegment=isegment+'-'+(HL7CName.getElementIndex()+1)/>
</#if>
<#assign isegmentend=isegment/>
<#assign chileds0=''/>
<#list HL7CName.getAllChildren() as chileds>
<#assign chileds0=chileds0+chileds/>
</#list>
<#if HL7CName.getAllChildren()?exists&&chileds0!=''>
<#assign iresult=iresult+'\n<'+isegment+'>\n'/>
<#else>
<#assign iresult=iresult+'\n<'+isegment+'>\n'+HL7CName/>
</#if>
<#if HL7CName.getAllChildren()?exists>
<#assign leve=leve+1/>
<#assign list=HL7CName.getAllChildren()>
<#include "hl7ToXml.ftl" >
<#assign leve=leve-1/>
</#if>
<#assign isegmentend=isegment/>
<#assign j=(pleve-leve)-1>
<#if j gt 0>
<#list 1..j as xunhuanend>
<#assign isegmentend=isegmentend?substring(0,isegmentend?last_index_of("-"))/>
</#list>
</#if>
<#assign iresult=iresult+'\n</'+isegmentend+'>'/>
</#if>
</#list>
原子服务write.ftl
<#list inputHl7 as nextinputHl7>
<#assign segmentlist0=''/>
<#list nextinputHl7.getAllChildren() as segmentlist>
<#assign segmentlist0=segmentlist/>
<#break>
</#list>
<#if nextinputHl7?index_of("\r")==nextinputHl7?last_index_of("\r")&&segmentlist0?split("|")?size == 1>
<#if nextinputHl7!=''>
<#if segmentlist0?split("|")?size == 1>
<#assign leve=1/>
<#assign list=nextinputHl7.getAllChildren()/>
<#assign segment=nextinputHl7[0]+nextinputHl7[1]+nextinputHl7[2]/>
<#assign iresult=''/>
<#include "hl7ToXml.ftl" >
<#assign iresult='\n<'+segment+'>'+iresult+'\n</'+segment+'>'/>
<#assign result=result+iresult/>
</#if>
</#if>
<#else>
<#assign inputHl7=nextinputHl7.getAllChildren()>
<#include "write.ftl" >
</#if>
</#list>
公共入口main
<#assign result=''/>
<#assign iresult=''/>
<#assign type=''/>
<#assign segment=''/>
<#assign isegment=''/>
<#assign type=inputEDI.getElementValue("MSH.MessageType.MessageType")+inputEDI.getElementValue("MSH.MessageType.TriggerEvent")/>
<#list inputEDI.getAllChildren() as HL7Name>
<#if HL7Name !=''>
<#assign segmentlist0=''/>
<#list HL7Name.getAllChildren() as segmentlist>
<#assign segmentlist0=segmentlist/>
<#break>
</#list>
<#if HL7Name?index_of("\r")==HL7Name?last_index_of("\r")>
<#assign leve=1/>
<#assign list=HL7Name.getAllChildren()/>
<#assign segment=HL7Name[0]+HL7Name[1]+HL7Name[2]/>
<#assign iresult=''/>
<#include "hl7ToXml.ftl" >
<#assign iresult='\n<'+segment+'>'+iresult+'\n</'+segment+'>'/>
<#assign result=result+iresult/>
<#else>
<#assign inputHl7=HL7Name.getAllChildren()>
<#include "write.ftl" >
</#if>
</#if>
</#list>
<${type}>${result?replace('&','&')}
</${type}>