我在Mirth中有一个通过HTTP接收XML消息的通道,但是当我尝试访问消息的属性和字段时,我无法。如果我将消息复制并粘贴到“发送消息”中,则可以使用,但是如果重新处理,则无效。在“原始”中看起来不错,但偶尔在“变形”中则是xml编码
示例消息:
<?xml version="1.0" encoding="utf-8" ?>
<test attr="foo" />
示例消息,如“已转换”所示:
<?xml version="1.0" encoding="utf-8" ?>
<test attr="foo" />
示例javascript:
channelMap.put('rootElementName', msg.localName()); // value is null
channelMap.put('attrValue', msg['@attr'].toString()); // undefined is not XML
导致这种失败的两个因素:
首先,E4X不支持<?xml version="1.0" encoding="utf-8" ?>
声明(bug 336551: You may get SyntaxError "xml is a reserved identifier")。您可以通过添加预处理器来删除声明来修复它:
return message.replace(/<\?xml[^>]*\?>/, "");
进一步引起混淆,如果选中了“设置XML消息格式”,则XML声明将隐藏在消息查看器中。
第二,如果您从任何.Net接收消息,则消息的前面可能有一个字节顺序标记。前三个字节可能是不可打印的,并且可能需要删除以使XML在Mirth中解析。
再次,抢救的预处理器(Example 1,Example 2):
return message.replace(/\uFEFF/g,'');