我有以下xml结构:
<a>
<b>
<c>foo</c>
</b>
<d>foo</d>
</a>
我需要从xml中删除标记<b>
。
所以,xml应该是这样的,最后:
<a>
<d>foo</d>
</a>
我尝试使用Enrich Mediator,wso2 6.1,但我没有成功。
有人可以帮忙弄清楚如何删除此标记?
谢谢!
答案 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)