首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mirth上用javascript迭代和提取xml中的数据

在mirth上用javascript迭代和提取xml中的数据
EN

Stack Overflow用户
提问于 2019-03-20 18:17:28
回答 2查看 4.1K关注 0票数 1

我使用的是MirthConnect3.7,JavaVersion1.8。我对欢乐和javascript都很陌生。我已经为javascript编写器设置了一个通道目的地,以便从插入mysql db的xml文件中获取数据。xml文件的示例部分如下所示:

代码语言:javascript
复制
   <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>

..。

我试图迭代地从xml中获取数据点,以便在mysql表中插入这些诊断代码。我现在的剧本是:

代码语言:javascript
复制
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 myNodeList = xml.querySelectorAll("DG1");

    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'] +  '")';
            //do something with myVar to get a query...
            dbConn.executeUpdate(myQuery);
    }

} catch (ex) {
    //handle any exceptions...
}

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

  1. 显然,我引用的数据点不恰当,javascript中的名称是什么?
  2. 是否有一个开发环境,我可以逐步通过代码和更好的疑难解答?
  3. 对于javascript和xml有什么好的推荐资源,因为它涉及到欢乐吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-22 02:14:26

迈尔斯使用Mozilla作为其Javascript引擎。对于XML处理,犀牛使用了一个被称为e4x的不推荐的标准。如果你在谷歌上搜索e4x,你会在developer.mozilla.org上找到几个页面,上面到处都是可怕的“过时”横幅,可能会很有帮助。当涉及到欢乐中的工作流时,mirth用户指南是非常详细的。

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没有抛出一个错误。通过对代码的最小更改:

代码语言:javascript
复制
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...
}

对每个循环和参数化语句使用一个:

代码语言:javascript
复制
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块,with将自动将消息状态设置为错误,将异常写入服务器日志,并触发可以使用定义的警报进行操作的事件。这通常比自己处理异常容易得多。

票数 2
EN

Stack Overflow用户

发布于 2019-03-21 14:36:48

嗨,这不太对。

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

那就这么做(这是为了保险,但你知道了)

代码语言:javascript
复制
for each ( in1 in msg['IN1']) { 
   var effdate =  in1['IN1.12']['IN1.12.1'];
 // etc

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55267648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档