使用 wso2 6.1 Enrich mediator 从 xml 中删除标签

Remove a tag from a xml using wso2 6.1 Enrich mediator

我有以下 xml 结构:

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

我需要从 xml.

中删除标签 <b>

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

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

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

有人可以帮忙弄清楚如何删除这个标签吗?

谢谢!

我想你可以用 Script mediator 来实现。

[1] http://mrmalakasilva.blogspot.com/2014/03/how-to-remove-xml-elements-using-script.html

[2] http://sumedhask.blogspot.com/search/label/WSO2%20Enterprise%20Service%20Bus

[3]http://www.vitharana.org/2016/02/wso2-esb-how-to-remove-jsonobject-root.html

您可以使用 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"/>

您无法使用 enrich 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>

这会得到你想要的结果。