首页 > 解决方案 > 为什么 HAPI 解析器在将 XML 转换为 HL7 时只占用最后一段?

问题描述

我正在使用 Java 中的 HL7 转换器与我正在开发的应用程序一起使用。

我使用以下 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

以下是我开发的两个功能:

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;
}

我正确运行了从 HL7 到 XML 的转换。这是结果输出:

<?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>

之后,我尝试将 XML 转换回 HL7,但结果是:

PV1||U

如果我只尝试一段,无论是哪一段,结果都是正确的。但是当尝试使用多个段时,它总是返回最后一个。

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

标签: javaxmlhl7hapihl7-v2

解决方案


推荐阅读