<http:listener config-ref="HTTP_Listener_Configuration" path="/order" allowedMethods="POST" doc:name="HTTP"/>
<splitter expression="#[xpath3('//elements/element',payload,'NODESET')]" doc:name="Splitter"/>
我的输入 xml
<?xml version="1.0" encoding="UTF-8"?>
<elements xmlns="http://xxx/xxservice">
<element>
<date>2015-09-03T14:30:36.000Z</order-date>
<created-by>user1</created-by>
</element>
<element>
<date>2015-09-04T14:30:36.000Z</order-date>
<created-by>user2</created-by>
</element>
</elements>
这不会返回任何结果。如果我将输入 xml 更改为下面,拆分器将返回 resutls
<?xml version="1.0" encoding="UTF-8"?>
<elements xmlns:a="http://xxx/xxservice">
<element>
<date>2015-09-03T14:30:36.000Z</order-date>
<created-by>user1</created-by>
</element>
<element>
<date>2015-09-04T14:30:36.000Z</order-date>
<created-by>storefront2</created-by>
</element>
</elements>
请注意,我唯一更改的是 xmlns 在<elements xmlns="http://xxx/xxservice">
中更改为 xmlns:a
原因是什么?
这完全是由于命名空间问题。如果您有企业许可证,则可以向 Mule 支持部门提出票
证或者,您可以做的是尝试在XPATH3中动态跳过命名空间,并可以使用以下内容中的mulexml:dom-to-xml-transformer
来提取xml元素值:-
<splitter expression="#[xpath3('/*:elements/*:element',payload,'NODESET')]" doc:name="Splitter"/>
<mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
<logger message="created-by: #[xpath3('/*:element/*:created-by',payload,'STRING')]" level="INFO" doc:name="Logger"/>
<logger message="date: #[xpath3('/*:element/*:date',payload,'STRING')]" level="INFO" doc:name="Logger"/>
上面的表达式将适用于您在此处提供的两个命名空间,您可以毫无问题地获取 xml 元素值,并且拆分器不会抱怨