hl7 java 解析

オリジナルリンク  http://blog.csdn.net/ycyangcai/article/details/6643784

 

HL7の目標は、データのメインエンジンを解決することであるHL7のプロトコルの標準化、および統合と異なるシステムの標準的なサービス間の標準的なビジネス・データの同期化の要件。病院情報プロセスの年後、HL7の標準化団体と最もここで、複雑を解決するには、私が長年のために使用したものであるHL7のエンジンパース、#1.C、主に2つのバージョンがあります2JAVAのバージョンのは。

 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))。
コードをコピー

おすすめ

転載: www.cnblogs.com/zhoading/p/12123790.html
HL7
HL7
HL7
hl7
hl7
HL7
HL7
hl7