使用wso2 6.1 Enrich mediator

时间:2017-05-03 17:44:30

标签: wso2 wso2esb

我有以下xml结构:

<a>
 <b>
   <c>foo</c>
 </b>
 <d>foo</d>
</a>

我需要从xml中删除标记<b>

所以,xml应该是这样的,最后:

<a>
  <d>foo</d>
</a>

我尝试使用Enrich Mediator,wso2 6.1,但我没有成功。

有人可以帮忙弄清楚如何删除此标记?

谢谢!

3 个答案:

答案 0 :(得分:5)

使用rich mediator无法轻松删除子元素。 如果你的有效载荷是这样的:

<Body>
  <b>
    <c>foo</c>
  </b>
  <d>foo</d>
</Body>

选择第二个标签并用它替换身体是一件简单的事情:

<enrich>
  <source clone="true" xpath="$body/d"/>
  <target type="body"/>
</enrich>

但在这种情况下,由于您需要从<a>中删除子元素,因此您可能希望使用脚本调解器来执行此操作:

<script language="js"><![CDATA[
     var message = mc.getPayloadXML();
     delete message.b;
     mc.setPayloadXML(message);
]]></script>

这将为您提供所需的结果。

答案 1 :(得分:2)

您可以使用XSLT介体 XSLT可以是本地条目,也可以是注册表。

您可以使用空模板来匹配您不想要的内容并复制其他内容,从而实现您想要的目标:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="b"/>

答案 2 :(得分:1)