Mule 3.9.x版本使用xpath3 NODESET配合foreach无法提取XML值问询
问题根因
Mule 3.9.x版本取消了XPath查询时自动将字符串格式XML隐式转换为DOM节点的逻辑,你直接传入字符串格式的payload调用xpath3取NODESET会返回空数组,低版本Mule存在隐式转换所以可以正常运行。
可行解决方案(完全符合仅用XPath+foreach的要求)
步骤1:新增XML转DOM转换器
在foreach节点前添加Mule自带的XML转DOM转换器,将输入的XML payload提前转换为DOM结构,不需要修改原有业务逻辑:
<mulexml:xml-to-dom-transformer returnClass="org.w3c.dom.Document" />
步骤2:保留原有foreach逻辑即可
你的原有foreach代码不需要修改,转成DOM后xpath3可以正常匹配到NODESET:
<foreach collection="#[xpath3('/ParentData/Data', payload, 'NODESET')]"> <!-- 循环内的原有业务逻辑保持不变 --> <!-- 若需要输出<Data>节点的XML字符串,可调用如下表达式: --> <logger message="#[org.mule.module.xml.util.XMLUtils.serialize(payload)]" level="INFO" /> </foreach>
临时兼容方案(不新增转换器)
如果不方便新增全局/本地转换器,可以直接在xpath3表达式内手动转DOM:
<foreach collection="#[xpath3('/ParentData/Data', org.mule.module.xml.util.XMLUtils.toDOM(payload), 'NODESET')]"> <!-- 业务逻辑 --> </foreach>
验证结果
按照上述方案调整后,foreach会循环2次,每次循环的payload为单个节点,序列化输出即可得到你期望的结果。
内容的提问来源于stack exchange,提问作者NGBeginner
相关产品推荐
相关产品推荐

