如何正确解析 HL7 消息字符串?
How to parse a HL7 message string properly?
我正在使用 NHAPI 包将传入的消息字符串解析为 HL7 IMessage
接口,使用 PipeParser
。
根据 HL7 Minimum Layer Protocol (MLP) 定义,HL7 消息总是由一些字符包裹,0x0b
在开头,0x1c, 0x0d
在结尾。出于测试目的,我使用工具 7Edit 将此消息发送到我的应用程序。
MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3
EVN|A01|201902271130|201902271130
PID|1||677789||Aubertinó^Letizia||19740731|F||
PV1|1|O|||||||||||||||||456456456
IN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertinó^Letizia||19740731|||||||||||201902271101|||||||X110173919
调试的消息字符串为
MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3
EVN|A01|201902271130|201902271130
PID|1||677789||Aubertin�^Letizia||19740731|F||
PV1|1|O|||||||||||||||||456456456
IN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertin�^Letizia||19740731|||||||||||201902271101|||||||X110173919
在这里您可以看到包裹邮件的字符。如果将此消息字符串传递给 PipeParser.Parse()
方法,它将抛出消息
的异常
Can't parse message beginning
MSH|^~&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|
我想我必须先删除所有这些字符。是否有现成的东西可以使用,或者我是否必须将所有这些定界符存储到字节数组中,将此字节数组转换为字符串并从消息字符串中删除这些定界符字符串?
以前从未使用过 NHAPI,但我经常处理 HL7 消息和接口。
您必须对获取的数据进行清理,因此您删除字符的假设是正确的。这些字符算作空格,所以一个简单的 Trim() 就可以了。我们的客户有时会在消息前随机添加特殊字符和双引号,这总是很有趣。但在这种情况下,修复非常简单。
下面的代码解析了我这边的消息。
string message2 = @"MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3
EVN|A01|201902271130|201902271130
PID|1||677789||Aubertin�^Letizia||19740731|F||
PV1|1|O|||||||||||||||||456456456
IN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertin�^Letizia||19740731|||||||||||201902271101|||||||X11017391";
var ourPP = new PipeParser();
try
{
//exception is thrown without the Trim(); No exception with the Trim()
var hl7Message = ourPP.Parse(message2.Trim());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
我正在使用 NHAPI 包将传入的消息字符串解析为 HL7 IMessage
接口,使用 PipeParser
。
根据 HL7 Minimum Layer Protocol (MLP) 定义,HL7 消息总是由一些字符包裹,0x0b
在开头,0x1c, 0x0d
在结尾。出于测试目的,我使用工具 7Edit 将此消息发送到我的应用程序。
MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3
EVN|A01|201902271130|201902271130
PID|1||677789||Aubertinó^Letizia||19740731|F||
PV1|1|O|||||||||||||||||456456456
IN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertinó^Letizia||19740731|||||||||||201902271101|||||||X110173919
调试的消息字符串为
MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3
EVN|A01|201902271130|201902271130
PID|1||677789||Aubertin�^Letizia||19740731|F||
PV1|1|O|||||||||||||||||456456456
IN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertin�^Letizia||19740731|||||||||||201902271101|||||||X110173919
在这里您可以看到包裹邮件的字符。如果将此消息字符串传递给 PipeParser.Parse()
方法,它将抛出消息
Can't parse message beginning MSH|^~&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|
我想我必须先删除所有这些字符。是否有现成的东西可以使用,或者我是否必须将所有这些定界符存储到字节数组中,将此字节数组转换为字符串并从消息字符串中删除这些定界符字符串?
以前从未使用过 NHAPI,但我经常处理 HL7 消息和接口。
您必须对获取的数据进行清理,因此您删除字符的假设是正确的。这些字符算作空格,所以一个简单的 Trim() 就可以了。我们的客户有时会在消息前随机添加特殊字符和双引号,这总是很有趣。但在这种情况下,修复非常简单。
下面的代码解析了我这边的消息。
string message2 = @"MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Proxy|201902271130||ADT^A01|68371142|P|2.3
EVN|A01|201902271130|201902271130
PID|1||677789||Aubertin�^Letizia||19740731|F||
PV1|1|O|||||||||||||||||456456456
IN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertin�^Letizia||19740731|||||||||||201902271101|||||||X11017391";
var ourPP = new PipeParser();
try
{
//exception is thrown without the Trim(); No exception with the Trim()
var hl7Message = ourPP.Parse(message2.Trim());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();