Java 阅读HL7消息,但不指定消息类型、事件类型或版本

Java 阅读HL7消息,但不指定消息类型、事件类型或版本,java,hl7,hapi,Java,Hl7,Hapi,我需要将HL7管道分隔消息读入表示消息结构的自定义Java结构。我需要在不使用任何消息类型、事件类型或特定于版本的方法或类的情况下执行所有这些操作,因为无论读取何种HL7消息,我都需要这些代码。我不想为每种不同的消息和事件类型编写一个阅读器。我需要得到所有的片段和子字段。我看了很多HAPI,看看它是否有一个预构建的解决方案来解决这个问题,但我没有发现任何东西 有没有扩展HAPI类或迭代HAPI从解析器创建的底层消息结构来解决这个问题 此外,如果您有任何关于HAPI的好资源,我们将不胜感激。请查看

我需要将HL7管道分隔消息读入表示消息结构的自定义Java结构。我需要在不使用任何消息类型、事件类型或特定于版本的方法或类的情况下执行所有这些操作,因为无论读取何种HL7消息,我都需要这些代码。我不想为每种不同的消息和事件类型编写一个阅读器。我需要得到所有的片段和子字段。我看了很多HAPI,看看它是否有一个预构建的解决方案来解决这个问题,但我没有发现任何东西

有没有扩展HAPI类或迭代HAPI从解析器创建的底层消息结构来解决这个问题

此外,如果您有任何关于HAPI的好资源,我们将不胜感激。

请查看。该库提供了将任何HL7转换为XML的功能。它不依赖于消息类型、事件类型或版本(与HAPI有很大区别)

例如:

MSH|^~\&|||||20121116122025||ADT^A01|5730224|P|2.5||||||UNICODE UTF-8
EVN|A01|20130120151827
PID||0|123||Name^Firstname^^^^||193106170000|w
PV1||E|
转化为

<?xml version="1.0" encoding="UTF-8"?>
<HL7X>
<HL7X>
    <MSH>
        <MSH.1>^~\&amp;</MSH.1>
        <MSH.6>20121116122025</MSH.6>
        <MSH.8>
            <MSH.8.1>ADT</MSH.8.1>
            <MSH.8.2>A01</MSH.8.2>
        </MSH.8>
        <MSH.9>5730224</MSH.9>
        <MSH.10>P</MSH.10>
        <MSH.11>2.5</MSH.11>
        <MSH.17>UNICODE UTF-8</MSH.17>
    </MSH>
    <EVN>
        <EVN.1>A01</EVN.1>
        <EVN.2>20130120151827</EVN.2>
    </EVN>
    <PID>
        <PID.2>0</PID.2>
        <PID.3>123</PID.3>    
        <PID.5>
            <PID.5.1>Name</PID.5.1>
            <PID.5.2>Firstname</PID.5.2>
        </PID.5>
        <PID.7>193106170000</PID.7>
        <PID.8>F</PID.8>
    </PID>
    <PV1>
        <PV1.2>E</PV1.2>            
    </PV1>
</HL7X>

^~\&;
20121116122025
ADT
A01
5730224
P
2.5
UNICODE UTF-8
A01
20130120151827
0
123
名称
名字
193106170000
F
E


然后,您可以从基于字符串的XML中获取信息,也可以使用任何XMLDocumentBuilder对其进行解析

使用HAPI可以以一种通用的方式解析消息,尽管您可能会发现自己编写了一些额外的代码,并转换了其中的一些输出,因为它不是设计用于这种方式的

我的意思是,它实际上是受支持的,只是您将不会从HAPI的许多更高级的功能中受益

通过使用、和类,我能够在短时间内启动并运行一个简单的泛型解析器。这是很基本的想法,但它做了我需要的

接下来,我想看看我是否能以一种不那么粗俗的方式完成一些工作(通过不太依赖铸造来阅读)


祝您好运,希望这有帮助

基础消息结构将根据消息类型/事件而改变。我不确定你想对你的项目做些什么,但是你很可能会发现非常非常少的项目需要使用所有可能的消息类型/事件。就像任何类型的软件开发一样,您需要确定您的程序将要做什么以及它需要什么信息。这将确定您实际需要消费的内容。我发现它可能重复处理MSH段不正确。。。MSH-1实际上应该是|,而MSH-2是其他保留字符。这意味着MSH段的所有索引都被关闭一次。也就是说,它让事情变得简单,这是非常好的,感谢链接