Веселье, преобразуй значение простого тега из входящего xml файла - PullRequest
0 голосов
/ 08 февраля 2020

Я хотел бы использовать веселье в следующем сценарии: 1. Получить файл xml 2. Изменить значение тега, если этот тег имеет заданное значение c 3. Исходящий результат xml

Итак, я имею в виду входящий разъем для чтения файлов и исходящий разъем для записи файлов. Как я могу преобразовать это xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<R>
  <NDOSM />
  <NADM>20060552</NADM>
  <DATECONS>20200205</DATECONS>
  <PRODNR />
  <PRODUCTID>1602235</PRODUCTID>
  <PRODUCTDESC>relaxine compr. pellic. 500 mg</PRODUCTDESC>
  <QTY>1.0</QTY>
  <PARSTOCKID>ethilog</PARSTOCKID>
  <PRIX />
  <STUPNR />
  <MEDNR>16822372</MEDNR>
  <CODEIDENTIFICATION />
  <SERIALNO />
  <NOMARGE />
  <PATIENTNAME>CLINT</PATIENTNAME>
  <PATIENTLASTNAME>EASTWOOD</PATIENTLASTNAME>
  <DATEOFBIRTH>19420910</DATEOFBIRTH>
  <LOTNR />
  <SERVICE />
  <SERVICEDIST>160</SERVICEDIST>
  <KEYFROMPM>20200205163309_05604132</KEYFROMPM>
  <TYPEMOUVEMENT>PREDISPOSITION</TYPEMOUVEMENT>
  <ANNULATION>N</ANNULATION>
  <PARSTOCKID-DOTATION />
  <COMMENTAIREMVT />
</R>

в этом

<?xml version="1.0" encoding="ISO-8859-1" ?>
<R>
  <NDOSM />
  <NADM>20060552</NADM>
  <DATECONS>20200205</DATECONS>
  <PRODNR />
  <PRODUCTID>1602235</PRODUCTID>
  <PRODUCTDESC>relaxine compr. pellic. 500 mg</PRODUCTDESC>
  <QTY>1.0</QTY>
  <PARSTOCKID>51</PARSTOCKID>
  <PRIX />
  <STUPNR />
  <MEDNR>16822372</MEDNR>
  <CODEIDENTIFICATION />
  <SERIALNO />
  <NOMARGE />
  <PATIENTNAME>CLINT</PATIENTNAME>
  <PATIENTLASTNAME>EASTWOOD</PATIENTLASTNAME>
  <DATEOFBIRTH>19420910</DATEOFBIRTH>
  <LOTNR />
  <SERVICE />
  <SERVICEDIST>160</SERVICEDIST>
  <KEYFROMPM>20200205163309_05604132</KEYFROMPM>
  <TYPEMOUVEMENT>PREDISPOSITION</TYPEMOUVEMENT>
  <ANNULATION>N</ANNULATION>
  <PARSTOCKID-DOTATION />
  <COMMENTAIREMVT />
</R>

Я должен изменить входящий xml только если значение тега PARSTOCKID является ethilog. В этом случае я должен заменить ethilog на 51. Я попробовал пару вещей без успеха: (

Спасибо

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Это довольно просто сделать с шагом javascript в веселье.

if (msg.PARSTOCKID.toString() == 'ethilog') {
    msg.PARSTOCKID = '51';
}
1 голос
/ 09 февраля 2020

Извиняюсь за публикацию чего-то, что является скорее комментарием, чем ответом, но это слишком долго для комментария, и это может помочь вам добраться туда, куда вы хотите.

В зависимости от метода, который Mirth использует для изменения текстовое значение узла, это выражение xpath

 /R//PARSTOCKID[text()='ethilog'] 

должно выбрать дочерний узел R с именем /PARSTOCKID, которое имеет текстовое значение ethilog; Затем вы применяете метод изменения текста непосредственно к этому дочернему узлу.

Если вам нужно начать с родительского узла, это выражение xpath

/R[//PARSTOCKID[text()='ethilog']]

должно выбрать любой R узел, который имеет ребенок с именем /PARSTOCKID, которое само имеет текстовое значение ethilog. В этот момент (и это просто дикая догадка ...) вы присваиваете имя некоторой переменной выбранному узлу R и делаете что-то вроде

my_var['PARSTOCKID']=51 (or maybe == "51"?)

Опять, извините, я могу ' Не могу быть более конкретным c, не будучи знакомым с Миртом, но если это приведет вас на полпути, это, вероятно, того стоит.

...