简体   繁体   English

为什么 HAPI 解析器在将 XML 转换为 HL7 时只占用最后一段?

[英]Why HAPI parser is taking only last segment while converting XML to HL7?

I'm working on HL7 Converter in Java to use with an application I'm developing.我正在使用 Java 中的 HL7 转换器与我正在开发的应用程序一起使用。

I'm using following HL7 message as a sample input:我使用以下 HL7 消息作为示例输入:

MSH|^~\\&|HCEN^^|ASSE^^|INUS^^|SALUD.UY^^|20190307113000^||ADT^A01^ADT_A04|72|P^|2.5|||||||^^^^^
EVN||20190228143000^|^|||^|^^
PID||^^^&&^^&&^^^&^&&|998855^^^ASSE&2.16.858.2.10001442.72768.9&ISO^^&&^^^&&&&&&&&^&&&&&&&&
PV1||U

Following are the two functions I developed:以下是我开发的两个功能:

public static String convertHl7toXml(String hl7MessageString) {
    // instantiate a PipeParser, which handles the "traditional or default encoding"
    PipeParser ourPipeParser = new PipeParser();
    String xmlMessageString = "";

    try {
        // parse the string format message into a Java message object
        Message hl7Message = ourPipeParser.parse(hl7MessageString);

        // instantiate an XML parser
        //HAPI provides 
        XMLParser xmlParser = new DefaultXMLParser();

        xmlMessageString = xmlParser.encode(hl7Message);

    } catch (Exception e) {
        e.printStackTrace();
    }
   return xmlMessageString;
}

public static String convertXmltoHl7(String xmlMessageString) {
    XMLParser xmlParser = new DefaultXMLParser();
    String hl7MessageString = "";

    try {
        Message hl7Message = xmlParser.parse(xmlMessageString);          
        System.out.println(hl7Message.toString());
        HapiContext context = new DefaultHapiContext();
        Parser parser = context.getPipeParser();
        hl7MessageString = parser.encode(hl7Message);            
    } catch (Exception e) {
            e.printStackTrace();
    }   
    return hl7MessageString;
}

I run the conversion from HL7 to XML correctly.我正确地运行了从 HL7 到 XML 的转换。 This is the resulting output:这是生成的 output:

<?xml version="1.0" encoding="UTF-8"?>
<ADT_A04 xmlns="urn:hl7-org:v2xml">
    <MSH>
        <MSH.1>|</MSH.1>
        <MSH.2>^~\&amp;</MSH.2>
        <MSH.3>
            <HD.1>HCEN</HD.1>
        </MSH.3>
        <MSH.4>
            <HD.1>ASSE</HD.1>
        </MSH.4>
        <MSH.5>
            <HD.1>INUS</HD.1>
        </MSH.5>
        <MSH.6>
            <HD.1>SALUD.UY</HD.1>
        </MSH.6>
        <MSH.7>
            <TS.1>20190307113000</TS.1>
        </MSH.7>
        <MSH.9>
            <MSG.1>ADT</MSG.1>
            <MSG.2>A01</MSG.2>
            <MSG.3>ADT_A04</MSG.3>
        </MSH.9>
        <MSH.10>72</MSH.10>
        <MSH.11>
            <PT.1>P</PT.1>
        </MSH.11>
        <MSH.12>
            <VID.1>2.3.1</VID.1>
        </MSH.12>
    </MSH>
    <EVN>
        <EVN.2>
            <TS.1>20190228143000</TS.1>
        </EVN.2>
    </EVN>
    <PID>
        <PID.3>
            <CX.1>998855</CX.1>
            <CX.4>
                <HD.1>ASSE</HD.1>
                <HD.2>2.16.858.2.10001442.72768.9</HD.2>
                <HD.3>ISO</HD.3>
            </CX.4>
        </PID.3>
        <PID.3>
            <CX.1>33434343</CX.1>
            <CX.4>
                <HD.1>CI</HD.1>
                <HD.2>2.16.858.2.10000675.68909</HD.2>
                <HD.3>ISO</HD.3>
            </CX.4>
        </PID.3>
        <PID.4>
            <CX.4>
                <HD.3>ISO</HD.3>
            </CX.4>
        </PID.4>
        <PID.5>
            <XPN.1>
                <FN.1>pasdsds</FN.1>
            </XPN.1>
            <XPN.2>juan</XPN.2>
        </PID.5>
        <PID.6>
            <XPN.1>
                <FN.1>dlsdsds</FN.1>
            </XPN.1>
        </PID.6>
        <PID.7>
            <TS.1>19890203</TS.1>
        </PID.7>
        <PID.8>1</PID.8>
        <PID.11>
            <XAD.1>Colonia 1652</XAD.1>
            <XAD.3>MONTEVIDEO</XAD.3>
            <XAD.4>MONTEVIDEO</XAD.4>
            <XAD.6>URUGUAY</XAD.6>
            <XAD.7>H</XAD.7>
        </PID.11>
    </PID>
    <PV1>
        <PV1.2>U</PV1.2>
    </PV1>
</ADT_A04>

After that I try to convert the XML back to HL7 but the result is just:之后我尝试将 XML 转换回 HL7 但结果只是:

PV1||U

If I try with just one segment, no matter which one, the result is correct.如果我只尝试一段,无论是哪一段,结果都是正确的。 But when trying with more than one segments, it always returns the last one.但是当尝试使用多个段时,它总是返回最后一个。

Why HAPI parser is taking only last segment while converting XML to HL7?为什么 HAPI 解析器在将 XML 转换为 HL7 时只占用最后一段?

I have modified your code to work in C#/.NET Core.我已修改您的代码以在 C#/.NET Core 中工作。 And it worked for your XML and other hl7Xml.它适用于您的 XML 和其他 hl7Xml。 You can follow this and do the same modification in Java code.您可以按照此在 Java 代码中进行相同的修改。

public static String ConvertXmltoHl7(String xmlMessageString)
{
    XMLParser xmlParser = new DefaultXMLParser();
    IMessage hl7Message = xmlParser.Parse(xmlMessageString);
    PipeParser pipeParser = new PipeParser();
    String hl7MessageString = pipeParser.Encode(hl7Message);
    return hl7MessageString;
}

xmlMessageString (Parmeter to ConvertXmltoHl7 method) xmlMessageString(参数转换为 ConvertXmltoHl7 方法)

<?xml version="1.0" encoding="UTF-8"?>
<ADT_A04 xmlns="urn:hl7-org:v2xml">
    <MSH>
        <MSH.1>|</MSH.1>
        <MSH.2>^~\&amp;</MSH.2>
        <MSH.3>
            <HD.1>HCEN</HD.1>
        </MSH.3>
        <MSH.4>
            <HD.1>ASSE</HD.1>
        </MSH.4>
        <MSH.5>
            <HD.1>INUS</HD.1>
        </MSH.5>
        <MSH.6>
            <HD.1>SALUD.UY</HD.1>
        </MSH.6>
        <MSH.7>
            <TS.1>20190307113000</TS.1>
        </MSH.7>
        <MSH.9>
            <MSG.1>ADT</MSG.1>
            <MSG.2>A01</MSG.2>
            <MSG.3>ADT_A04</MSG.3>
        </MSH.9>
        <MSH.10>72</MSH.10>
        <MSH.11>
            <PT.1>P</PT.1>
        </MSH.11>
        <MSH.12>
            <VID.1>2.3.1</VID.1>
        </MSH.12>
    </MSH>
    <EVN>
        <EVN.2>
            <TS.1>20190228143000</TS.1>
        </EVN.2>
    </EVN>
    <PID>
        <PID.3>
            <CX.1>998855</CX.1>
            <CX.4>
                <HD.1>ASSE</HD.1>
                <HD.2>2.16.858.2.10001442.72768.9</HD.2>
                <HD.3>ISO</HD.3>
            </CX.4>
        </PID.3>
        <PID.3>
            <CX.1>33434343</CX.1>
            <CX.4>
                <HD.1>CI</HD.1>
                <HD.2>2.16.858.2.10000675.68909</HD.2>
                <HD.3>ISO</HD.3>
            </CX.4>
        </PID.3>
        <PID.4>
            <CX.4>
                <HD.3>ISO</HD.3>
            </CX.4>
        </PID.4>
        <PID.5>
            <XPN.1>
                <FN.1>pasdsds</FN.1>
            </XPN.1>
            <XPN.2>juan</XPN.2>
        </PID.5>
        <PID.6>
            <XPN.1>
                <FN.1>dlsdsds</FN.1>
            </XPN.1>
        </PID.6>
        <PID.7>
            <TS.1>19890203</TS.1>
        </PID.7>
        <PID.8>1</PID.8>
        <PID.11>
            <XAD.1>Colonia 1652</XAD.1>
            <XAD.3>MONTEVIDEO</XAD.3>
            <XAD.4>MONTEVIDEO</XAD.4>
            <XAD.6>URUGUAY</XAD.6>
            <XAD.7>H</XAD.7>
        </PID.11>
    </PID>
    <PV1>
        <PV1.2>U</PV1.2>
    </PV1>
</ADT_A04>

hl7MessageString (return value of ConvertXmltoHl7 method) hl7MessageString(ConvertXmltoHl7 方法的返回值)

MSH|^~\&|HCEN|ASSE|INUS|SALUD.UY|20190307113000||ADT^A01^ADT_A04|72|P|2.3.1
EVN||20190228143000
PID|||998855^^^ASSE&2.16.858.2.10001442.72768.9&ISO~33434343^^^CI&2.16.858.2.10000675.68909&ISO|^^^&&ISO|pasdsds^juan|dlsdsds|19890203|1|||Colonia 1652^^MONTEVIDEO^MONTEVIDEO^^URUGUAY^H
PV1||U

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM