欢乐地从javascript中的xml迭代和提取数据

时间:2019-03-20 18:17:28

标签: javascript xml mirth

我正在使用Java版本1.8 mirth connect 3.7。我对mirth和javascript都是陌生的。我已经设置了一个指向JavaScript编写器的通道目标,以从插入mysql数据库的xml文件中获取数据。 xml文件的示例部分,如下所示: ...

#include <stdio.h>

char main;

void p2() {
    printf("0x%x\n", main);
}

...

我试图迭代地从xml中获取数据点,以便可以将这些诊断代码插入mysql表中。此时我的脚本:

   <DG1>
        <DG1.1>
            <DG1.1.1>1</DG1.1.1>
        </DG1.1>
        <DG1.2>
            <DG1.2.1>I10</DG1.2.1>
        </DG1.2>
        <DG1.3>
            <DG1.3.1>R10.9</DG1.3.1>
        </DG1.3>
        <DG1.4>
            <DG1.4.1>UNSPECIFIED ABDOMINAL PAIN</DG1.4.1>
        </DG1.4>
        <DG1.5/>
        <DG1.6>
            <DG1.6.1>A</DG1.6.1>
        </DG1.6>
        <DG1.7/>
        <DG1.8>
            <DG1.8.1>391</DG1.8.1>
        </DG1.8>
        <DG1.9/>
        <DG1.10/>
        <DG1.11>
            <DG1.11.1>4252.21</DG1.11.1>
        </DG1.11>
        <DG1.12/>
        <DG1.13/>
        <DG1.14/>
        <DG1.15/>
        <DG1.16/>
        <DG1.17/>
        <DG1.18>
            <DG1.18.1>N</DG1.18.1>
        </DG1.18>
    </DG1>
    <DG1>
        <DG1.1>
            <DG1.1.1>2</DG1.1.1>
        </DG1.1>
        <DG1.2>
            <DG1.2.1>I10</DG1.2.1>
        </DG1.2>
        <DG1.3>
            <DG1.3.1>R10.9</DG1.3.1>
        </DG1.3>
        <DG1.4>
            <DG1.4.1>UNSPECIFIED ABDOMINAL PAIN</DG1.4.1>
        </DG1.4>
        <DG1.5/>
        <DG1.6>
            <DG1.6.1>A</DG1.6.1>
        </DG1.6>
        <DG1.7/>
        <DG1.8>
            <DG1.8.1>391</DG1.8.1>
        </DG1.8>
        <DG1.9/>
        <DG1.10/>
        <DG1.11>
            <DG1.11.1>4252.21</DG1.11.1>
        </DG1.11>
        <DG1.12/>
        <DG1.13/>
        <DG1.14/>
        <DG1.15/>
        <DG1.16/>
        <DG1.17/>
        <DG1.18>
            <DG1.18.1>N</DG1.18.1>
        </DG1.18>
    </DG1>

它无例外运行,但我显然没有捕获预期的数据。同样,这是javascript,mirth和xml解析的新功能。问题:

  1. 很明显,我不适当地引用了数据点,javascript中的术语是什么?
  2. 有没有一个我可以逐步检查代码并更好地排除故障的开发环境?
  3. 对于与欢乐相关的javascript和xml,有没有很好的推荐资源?

2 个答案:

答案 0 :(得分:1)

Mirth使用Mozilla Rhino作为其Javascript引擎。 Rhino使用过时的标准e4x进行XML处理。如果您在Google中搜索e4x,则会在developer.mozilla.org上找到几个页面,这些页面到处都有可怕的“过时”横幅,这可能会有所帮助。关于欢乐的工作流程,欢乐用户指南非常详细。

https://github.com/mozilla/rhino

https://web.archive.org/web/20181120184304/https://wso2.com/project/mashup/0.2/docs/e4xquickstart.html(另一种不错的e4x资源)

https://www.nextgen.com/products-and-services/NextGen-Connect-Integration-Engine-Downloads(用于用户指南)

我很惊讶querySelectorAll没有抛出错误。只需对代码进行最少的更改:

try {
    var dbConn = DatabaseConnectionFactory.createDatabaseConnection ('com.mysql.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/adt', 'xxx', 'xxx');
    var xml = new XML(connectorMessage.getEncodedData());
    // This should work, but is not typically how hl7 segments are accessed. Would need to see more than a segment for typical usage.
    var myNodeList = xml.descendants("DG1"); // returns type XMLList

    // length is a function instead of property on XMLList objects
    for (i = 0; i < myNodelist.length(); i++) {
            var myQuery = 'INSERT INTO adt.diagnosis (AcctNum, MRN, ICD10) VALUES ("'+ $('AcctNum') + '", "' + $('MedRecNum') + '", "' +  myNodelist[i]['DG1.3']['DG1.3.1'] +  '")';
            dbConn.executeUpdate(myQuery);
    }
} catch (ex) {
    //handle any exceptions...
}

为每个循环和参数化的sql语句使用

try {
    var dbConn = DatabaseConnectionFactory.createDatabaseConnection ('com.mysql.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/adt', 'xxx', 'xxx');
    var xml = new XML(connectorMessage.getEncodedData());    
    var myQuery = 'INSERT INTO adt.diagnosis (AcctNum, MRN, ICD10) VALUES (?, ?, ?)';

    for each (var dg1 in xml.descendants('DG1')) {
            dbConn.executeUpdate(myQuery, new java.util.ArrayList([$('AcctNum'), $('MedRecNum'), dg1['DG1.3']['DG1.3.1'].toString()]));
    }
} catch (ex) {
    //handle any exceptions...
}

finally之后,您需要一个try块来关闭数据库连接。如果删除catch块,则mirth会自动将消息状态设置为ERROR,将异常写入服务器日志,并触发事件,您可以使用已定义的警报对其进行操作。通常比尝试自己处理异常要容易。

答案 1 :(得分:0)

嗨,这不太正确。

首先确保您的数据类型为HL7。

然后执行此操作(这是为了保险,但您知道了)

df.assign(errorEval=df['dog'].isin(dogSpecies).astype(int)).errorEval.values
# array([1, 1, 1, 0, 1, 1, 0, 0, 0])