wso2 esb在xml中丰富文本

时间:2017-04-26 06:55:23

标签: xml xpath wso2esb

我正在尝试使用WSO2 ESB版本4.9.0来丰富XML节点的文本。

简单XML:

<enrich>
    <source type="inline">
        <query><where><order.id>0</order.id></where></query>
    </source>
    <target type="body" />
</enrich>

富民:

<enrich>
    <source type="property" property="uri.var.processId" />
    <target action="replace" type="body" xpath="//order.id/text()" />
</enrich>

但输出如下:

<query xmlns="http://ws.apache.org/ns/synapse"><where><order.id>0</order.id></where>SOHBSS-000002</query>

当我期待这个时:

<query xmlns="http://ws.apache.org/ns/synapse"><where><order.id>SOHBSS-000002</order.id></where></query>

当我更加简化给定的XML到<order.id>0</order.id>来自上面的同一个富集中介时,会给出正确的<order.id xmlns="http://ws.apache.org/ns/synapse">SOHBSS-000002</order.id>输出。

xpath错了吗?或者我使用丰富的调解员来做一些不适合的事情?

因为XML很简单,所以我试图不让我们的XSLT进行更改。

2 个答案:

答案 0 :(得分:1)

在您的第二次充实中,尝试将目标类型从正文替换为自定义:

<enrich>
    <source type="property" property="uri.var.processId" />
    <target action="replace" type="custom" xpath="//order.id/text()" />
</enrich>

答案 1 :(得分:0)

我在使用命名空间的标签上尝试使用xpath时遇到了一些困难,所以在这里(感谢Lesrac关于xmlns的评论)

<enrich>
    <source type="inline">
        <query namespace="http://www.fadata.bg/Insurance_Messages/v3.0/xml/">
          <where><order.id>0</order.id></where></query>
    </source>
    <target type="body" />
</enrich>
<enrich>
    <source type="property" property="uri.var.processId" />
    <target action="replace" type="custom" xpath="//fadata:order.id/text()"
       xmlns:fadata="http://www.fadata.bg/Insurance_Messages/v3.0/xml/"/>
</enrich>