итерация и извлечение данных из XML в JavaScript на веселье - PullRequest
0 голосов
/ 20 марта 2019

Я использую mirth connect 3.7, Java версии 1.8. я новичок как в веселье, так и в JavaScript. Я настроил назначение канала для писателя javascript, чтобы получать данные из XML-файлов, вставленных в базу данных mysql. Пример раздела XML-файла выглядит следующим образом: ...

   <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. мой сценарий на данный момент:

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, веселье и синтаксический анализ XML. Вопросы:

  1. очевидно, я неправильно ссылаюсь на точки данных, какова номенклатура в javascript?
  2. Есть ли в среде разработчика среда, в которой я могу пройти по коду и устранить неполадки?
  3. Есть ли какие-нибудь хорошие рекомендуемые ресурсы для javascript и xml, поскольку они относятся к веселью?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Mirth использует Mozilla Rhino для своего движка Javascript.Rhino использует устаревший стандарт e4x для обработки XML.Если вы ищете в Google e4x, вы найдете несколько страниц на developer.mozilla.org со страшными «устаревшими» баннерами везде, которые могут быть полезны.Руководство пользователя mirth очень подробное, когда речь идет о рабочем процессе в среде 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 не выдал ошибку.С минимальными изменениями в вашем коде:

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, запишет исключение в журнал сервера и сгенерирует событие, с которым вы можете воздействовать с помощью определенного предупреждения.Обычно это проще, чем пытаться обрабатывать исключение самостоятельно.

0 голосов
/ 21 марта 2019

Привет, это не совсем правильно.

Сначала убедитесь, что ваш тип данных HL7.

Затем сделайте это (это для страховки, но вы поняли)

for each ( in1 in msg['IN1']) { 
   var effdate =  in1['IN1.12']['IN1.12.1'];
 // etc

}
...