オリジナルリンク http://blog.csdn.net/ycyangcai/article/details/6643784
HL7の目標は、データのメインエンジンを解決することであるHL7のプロトコルの標準化、および統合と異なるシステムの標準的なサービス間の標準的なビジネス・データの同期化の要件。病院情報プロセスの年後、HL7の標準化団体と最もここで、複雑を解決するには、私が長年のために使用したものであるHL7のエンジンパース、#1.C、主に2つのバージョンがあります2。JAVAのバージョンのは。
JAVAの開示
1 //引擎类: 2 3パッケージcom.xxxx.hl7。 4インポートjava.io.FileOutputStreamは。 5インポートにjava.io.IOException; 6インポートjava.io.OutputStreamWriterが。 7インポートのjava.io.Writer。 8インポートはjava.util.List; 9インポートorg.dom4j.Document。 10インポートorg.dom4j.DocumentHelper。 11インポートorg.dom4j.Element。 12インポートorg.dom4j.Node。 13インポートorg.dom4j.io.OutputFormat。 14インポートorg.dom4j.io.XMLWriter。 15 // HL7转换为XML 16パブリッククラスHL7ToXmlConverter { 17 // 18パブリック静的な文字列ConvertToXml(文字列sHL7){ 19ドキュメントドキュメント= ConvertToXmlObject(sHL7)。 20列hl7str = document.asXML()。 21リターンhl7str。 22} 23 // 24パブリック静的な文字列ConvertToXml(文書ドキュメント){ 25列hl7str = document.asXML()。 26リターンhl7str。 27} 28 29公共の静的ドキュメントConvertToXmlObject(文字列sHL7){ 30ドキュメントドキュメント= CreateXmlDoc()。 31 //把HL7分成段 32のString [] sHL7Lines = sHL7.split( "\ n"); 33 //去掉XML的关键字 34(iは= INT 0; I <sHL7Lines.length; I ++){ 35 sHL7Lines [I] = sHL7Lines [I] .replace( "^〜\\&"、 "")。 ( "MSH"、 "MSHを|")を交換。 36} (INT 37 iが0 =; I <sHL7Lines.length。 39(sHL7Lines [I]であれば! 41によって/ R //であるか、または/ N分周器キャリッジ 42は、[] = GetMessgeFields SFIELDS(sHL7Line)文字列であり、 43は、第1レベルのノードは//セグメント(行)が作成されている 44 EL = document.getRootElement要素()はaddElement(SFIELDS [0]);. 45 //サイクル各行 46は真のブール= isMshである; (INT 1 = A、A <sFields.length; A ++)47 { 48 //もしコネクタは、HL7を備え&\\〜^ 49 IF(SFIELDS [] .indexOf( '^')> 0 || SFIELDS [] .indexOf( '〜')が> 0 || SFIELDS [] .indexOf( '\\')> 0 || SFIELDS [A] .indexOf( '&')> 0){ 50 // 0:行セパレータのいずれかがある場合 ~~~~~~~~を動作51を開始するには、@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 52で区切っ//〜 53は、文字列[] = sComponents GetRepetitions(SFIELDS [A])です。 54(sComponents.length> 1)であれば{ 55 @ 1:郭靖^^検査数^ EQ ^ AND〜0002 ^^東部地区番号病棟EQ ^ AND ^場合0001を分離することができる (; B <sComponents.length; B ++ INT = B 0){56のためのものであるが 57であります/ / = el.addElement fieldEl1要素(SFIELDS [0] + + A ""); 58 createComponents(EL、sComponents [B]、SFIELDS [0]、A、B); 59} 60} 61 {そうである // 62であります1:0001は本当に郭靖^ ^ ^とEQ医療号^の一つの値だけであれば 63は、最初のフィールドのために作成された//二つのノード 64 // =エレメントfieldEl el.addElement(SFIELDS [0] + A + ""); 65 createComponents(EL、SFIELDS [A]、SFIELDS [0]、A、0); //FieldEl.setText(sFields[a]+"11111111111111 66「); 67} 68 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ 69} 70 {他 71が0 @ある:NOデリミタこの行場合 72は、フィールド作成//第二レベルのノードではない 81 document.selectSingleNode( "HL7Message / MSH / MSH.2")のsetText( "。 〜^&\\「); 73要素fieldEl = el.addElement(SFIELDS [0] + + "")。 74 fieldEl.setText(SFIELDS [A])。 75} 76} 77} // END IF 78} //端 79 //修改MSH.1和MSH.2的值 80 document.selectSingleNode( "HL7Message / MSH / MSH.1")のsetText( "|" ); 82 // document.selectNodes( "MSH / MSH.1"); 83リターンドキュメント; 84} 85 @SuppressWarnings( "未使用") 86は、プライベート静的要素CreateComponentsは(最終素子ELは、最終的な文字列hl7Componentsは、文字列sFieldは、INT、INT B){ 87要素componentEl = el.addElement(sField + "" +) ; 88 //要素componentEl =エル; //。 89 // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 90 //通过&分隔 91のString []サブコンポーネント= GetSubComponents(hl7Components)。 92 IF(subComponents.length> 1){ 93 // 2。如果有字组、一般是没有的...子分组用&很少用 94} 、{95他 96 // 2。 (; C <sRepetitions.length、C ++ INT C = 0){100 101 repetitionEl = componentEl.addElement( ""、 "" sField + + + +(C + 1))。 102 repetitionEl.setText(sRepetitions [C])。 103} 104} 105他{ 106 componentEl.setText(hl7Components)。 107} 108} 109 // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 110リターンエル。 111} 112 113 /// <要約> 114 ///通过|分隔字段 115 /// </要約> 116 /// <PARAM NAME = "S"> </ PARAM> 117 /// <戻る> </戻り> 118 119プライベート静的な文字列[] GetMessgeFields(文字列S){ 120戻りs.split( "\\ |")。 121} 122 /// <要約> 123 ///通过^分隔组字段 124 /// </要約> 125 ///ます。<param name = "S"> </ PARAM> 126 /// <戻る> </復帰> 127 128プライベート静的な文字列[]のgetComponents(文字列S){ 129戻りs.split( "\\ ^")。 130} /// </要約> 133 134 ///ます。<param name = "S"> </ PARAM> 135 /// <戻る> </戻り> 136 137プライベート静的な文字列[] GetSubComponents(文字列S){ 138戻りs.split( "&")。 139} 140 /// <要約> 141 ///通过〜分隔重复 142 /// </要約> 143 /// <PARAM NAME = "S"> </ PARAM> 146リターンs.split( "〜"); 147} 148 /// <要約> 149 ///创建XML对象 150 /// </要約> 151 /// <戻る> </戻り> 152プライベート静的ドキュメントCreateXmlDoc(){ 167パブリック静的文字列GetTextは(文書、文書、 155エレメントルートノード= output.addElement( "HL7Message")。 156リターン出力。 157} 158パブリック静的文字列GetTextは(文書、文書、文字列のパス){ 159ノードのノード= document.selectSingleNode( "HL7Message /" +パス)。 160 IF(!ノード= NULL){ 161リターンnode.getText()。 162} 163他{ 164リターンヌル。 165} 166} 168リスト・ノード= document.selectNodes( "HL7Message /" +パス)。 169 IF(!ノード= NULL){ 170リターン((ノード)nodes.get(インデックス))のgetText()。 171} 172他{ 173リターンヌル。 174} 175} 176 177 // 178パブリック静的リストGetTexts(文書ドキュメント、文字列のパス){ 179個のリスト・ノード= document.selectNodes( "HL7Message /" +パス)。 180個のリターンノード; 181} 182 183 // 184パブリック静的ボイドwriteDocument(文書ドキュメント、文字列のファイルパス){ 185のtry { 186 //读取文件 187 //てFileWriterてFileWriter =新しいてFileWriter(ファイルパス)。 188ライターライター=新しいするOutputStreamWriter(新たFileOutputStream(ファイルパス)、 "UTF-8"); 189 //设置文件编码 190 OUTPUTFORMATのXMLFormat =新しいOUTPUTFORMAT(); 191 xmlFormat.setEncoding( "UTF-8"); 192 //创建写文件方法 193するXMLWriterたXmlWriter =新しいするXMLWriter(作家、のXMLFormat)。 194 //写入文件 XmlWriter.write 195(文献); 196 //閉じる 197 xmlWriter.close(); 198}キャッチ{(IOExceptionをE) 199のSystem.out.println( "ファイルが見つかりません"); 200 e.printStackTrace()であり、 201} 202} 203}
ユニットテストは、クラスを呼び出します。
1文字列myHL7string = "MSH | ^〜\\&| 455755610_0100 || || 0200 20110624160404 | 000 | QRY ^ ^ A19 QRY_A19 | 0123456001 | P | 2.6 \ nQRD ||||||||| 0001 ^ ^郭靖体检号^ EQ ^と〜0002 ^东一区^病区号^ ^ EQと\ nQRF || 20110627 | 20110803" ; 2ドキュメントのドキュメント= HL7ToXmlConverter.ConvertToXmlObject(myHL7string)。 3 //获取事件 4列eventNameの= HL7ToXmlConverter.GetText(文書、 "MSH / MSH.9 / MSH.9.3")。 5のSystem.out.println( "eventNameの" + eventNameの)。 6 //リストのnodeValue = document.selectNodes( "MSH.1"); 7文字列のnodeValue = document.selectSingleNode( "HL7Message / MSH / MSH.1")のgetText()。 8文字列nodeValue2 = document.selectSingleNode( "HL7Message / MSH / MSH.3")のgetText()。 9 // DocumentElement.SelectNodes(パス)。 10のSystem.out。 11文字列値= HL7ToXmlConverter.GetText(文書、 "QRD / QRD.9 / QRD.9.1"、0); 12文字列値1 = HL7ToXmlConverter.GetText(文書、 "QRD / QRD.9 / QRD.9.1"、1); 13文字列値2 = HL7ToXmlConverter.GetText(文書、 "QRD / QRD.9 / QRD.9.1")。 14のSystem.out.println(値+ ":" + VALUE1 + ":" + VALUE2)。 15リストの<node>リスト= HL7ToXmlConverter.GetTexts(文書、 "QRD / QRD.9 / QRD.9.1")。 (ノードノード:リスト)16 17 { 18のSystem.out.println( ":" + node.getText())。 19} 20のSystem.out.println(HL7ToXmlConverter.ConvertToXml(myHL7string))。