如果输入 XML 中不存在 XML 命名空间:前缀,则拆分器不会返回结果


 <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 元素值,并且拆分器不会抱怨

最新更新