1、HL7测试工具
测试工具用到了7Edit,使用可参考7Edit解析工具的使用(二)_hl7格式工具_WW大魔王的博客-CSDN博客
2、用到的Jar包
<!-- https://mvnrepository.com/artifact/ca.uhn.hapi/hapi-base -->
<dependency>
<groupId>ca.uhn.hapi</groupId>
<artifactId>hapi-base</artifactId>
<version>2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ca.uhn.hapi/hapi-structures-v24 -->
<dependency>
<groupId>ca.uhn.hapi</groupId>
<artifactId>hapi-structures-v24</artifactId>
<version>2.3</version>
</dependency>
3、JAVA解析Demo
3.1 简单的Demo
下面的demo中,需要注意几点:
1、换行要使用\r不能使用\n
2、每个段前面的第一个属性为段名,使用message.get()时,会自动匹配到对应段的实体类,如下面访问MFI段,没有对应实体类的段使用通用的类GenericSegment类进行解析如示例中的Z2B段。
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.GenericSegment;
import ca.uhn.hl7v2.model.Message;
import ca.uhn.hl7v2.model.v24.segment.MFI;
import ca.uhn.hl7v2.parser.PipeParser;
/**
* @author 崔
* @version 0.0.1
* @Date 2023/7/26 18:45
*/
public class HL7ParserExample {
public static void main(String[] args) throws HL7Exception {
// 示例HL7 XML消息
String hl7XML = "MSH|^~\\&|HIS^1|MediInfo|MediII^1|MediInfo|20180417152317||MFN^Z2B^MFN_Z2B|39a3d175f5034a2a9d41d35c911d0562|P|2.4\r" +
"MFI|Z2B||UPD|||AL\r" +
"MFE|MAD|9a3b31292e3a47e1b59f63ba15c47f94||0|ST\r" +
"Z2B|10741|2|demo||||||||1|0|0|0|^MZYVIPMZQ~^QKAVIPUYY~^QKAVIPUYY|9999|20180417153203|21||0|11000000000000000000000000";
// 创建一个新的PipeParser实例
PipeParser parser = new PipeParser();
// 解析HL7 XML消息
Message message = parser.parse(hl7XML);
// 访问MFI段
MFI mfi = (MFI) message.get("MFI");
// 获取MFI段的第一段中的第1个属性
System.out.println(mfi.getMfi1_MasterFileIdentifier().getIdentifier());
// 访问Z2B段(GenericSegment)
GenericSegment genericSegment = (GenericSegment) message.get("Z2B");
// 从Z2B段中提取并打印特定字段
System.out.println("第15段第1个属性" + genericSegment.getField(15, 0).encode());
System.out.println("第15段第2个属性" + genericSegment.getField(15, 1).encode());
}
}
打印结果
Z2B
^MZYVIPMZQ
^QKAVIPUYY
3.2 如何获取想要的节点数据
如上面示例
MFI mfi = (MFI) message.get("MFI");
System.out.println(mfi.getMfi1_MasterFileIdentifier().getIdentifier());
怎么要获取MFI里面哪个数据,工具7Edit解析中,在每个标签后面都加了字段名称,直接get就可以获取指定的数据。
但是解析中数据类型和Java的数据类型并不匹配,字段有encode()方法,让解析的数据变成String数据类型。