Rhapsody freeMaker 将任意HL7转XML

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('&','&amp;')}
</${type}>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值