繁体   English   中英

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

[英]Why HAPI parser is taking only last segment while converting XML to 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 的转换。 这是生成的 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>

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

PV1||U

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

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

我已修改您的代码以在 C#/.NET Core 中工作。 它适用于您的 XML 和其他 hl7Xml。 您可以按照此在 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(参数转换为 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(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