如果输入xml中不存在xml namespace:前缀,则splitter不返回结果

时间:2017-06-23 01:11:41

标签: mule mule-component dataweave

 <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到xmlns:<elements xmlns="http://xxx/xxservice">

中的a

是什么原因?

1 个答案:

答案 0 :(得分:0)

这完全是由命名空间问题引起的。如果您拥有企业许可证,则可以提出购买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元素值和分割器不会抱怨