Mirth Connect中HL7v2 OBR段字段移位时XML标签冗余问题的解决咨询
解决Mirth Connect OBR字段移位后出现XML标签的问题
我一眼就看出问题出在你获取字段内容的方式上——你用toString()拿到的是整个XML节点的字符串(包括标签),而不是字段的实际值。咱们来改改代码,让移位后的字段只保留纯值:
方法1:使用Mirth内置的getElementValue()方法
这是最直接的解决方案,Mirth专门提供了这个方法来提取HL7字段的文本值,自动处理多组件的拼接,完全不会带XML标签。修改你的代码如下:
function testFunction(){ for (var i = 0; i < msg['OBR'].length(); i++){ var obr = msg['OBR'][i]; var totalFields = obr.children().length(); // 从后往前移位,避免覆盖未处理的字段 for (var j = totalFields; j >= 24; j--){ // 用getElementValue获取纯字段值 var currentValue = msg['OBR'][i]['OBR.' + j].getElementValue(); // 将值赋值给下一个字段 msg['OBR'][i]['OBR.' + (j + 1)] = currentValue; // 清空原字段的值 msg['OBR'][i]['OBR.' + j] = ''; } } }
方法2:手动提取子组件的值(适合自定义拼接逻辑)
如果某些字段有多个子组件,你想自定义拼接规则(比如用特定分隔符),可以手动遍历子组件:
function getFieldValue(fieldNode) { var values = []; // 遍历所有子组件节点 for (var k = 0; k < fieldNode.children().length(); k++) { var component = fieldNode.children()[k]; if (component.getText()) { values.push(component.getText()); } } // 用HL7默认的分隔符^拼接子组件 return values.join('^'); } function testFunction(){ for (var i = 0; i < msg['OBR'].length(); i++){ var obr = msg['OBR'][i]; var totalFields = obr.children().length(); for (var j = totalFields; j >= 24; j--){ var fieldNode = obr['OBR.' + j]; var currentValue = getFieldValue(fieldNode); obr['OBR.' + (j + 1)] = currentValue; obr['OBR.' + j] = ''; } } }
为什么之前的代码会出问题?
当你调用obr['OBR.' + j].toString()时,Mirth会把整个XML节点(包括<OBR.xx>和<OBR.xx.1>这些标签)转换成字符串,而不是只提取里面的文本内容。用getElementValue()或者getText()(针对单个组件)才能拿到你需要的纯值。
测试一下修改后的代码,移位后的OBR.25就只会显示F,不会带任何XML标签,完全符合你的预期结果。
内容的提问来源于stack exchange,提问作者B. Smith
相关产品推荐
相关产品推荐

