我有一个带有XML负载的Mule流,如:
<?xml version="1.0" encoding="utf-16"?>
<root type="1" name="blah">
<blablah value="10" desc="Material" />
</root>
我想重命名“root”节点并尝试使用xml-to-dom-transformer和expression组件。但是,我不知道该怎么做。我尝试过这样的事情没有帮助:
<expression-component><![CDATA[
node = message.payload.getRootElement();
node.renameNode = 'peo';
]]></expression-component>
此致
答案 0 :(得分:2)
基本上,我建议采用与Anirban相同的方法。但是,更简单的XSLT。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<newRoot>
<xsl:attribute name="type">
<xsl:value-of select="root/@type" />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="root/@name" />
</xsl:attribute>
<xsl:copy-of select="root/node()" />
</newRoot>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
您可以在Mule中使用XSLT转换器来修改XML
参考: - https://docs.mulesoft.com/mule-user-guide/v/3.7/xslt-transformer
在Mule社区版中,可以很容易地将XML的任何元素/节点,值,属性修改为您自己的自定义格式。
例如,下面的xslt脚本将允许您修改 root 元素名称: -
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<peo>
<xsl:attribute name="type">
<xsl:value-of select="root/@type" />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="root/@name" />
</xsl:attribute>
<blablah>
<xsl:attribute name="value">
<xsl:value-of select="root/blablah/@value" />
</xsl:attribute>
<xsl:attribute name="desc">
<xsl:value-of select="root/blablah/@desc" />
</xsl:attribute>
</rootmodified>
</peo>
</xsl:template>
</xsl:stylesheet>
此处根元素<root>
已更改为<peo>
答案 2 :(得分:0)
您可以使用Dataweave(转换消息)。
尝试:
%dw 1.0
%output application/xml encoding="UTF-8"
---
{
brandNewRoot @(type: payload.root.@type, name: payload.root.@name): {
(payload)
}
}
您将收到此回复:
<?xml version='1.0' encoding='UTF-8'?>
<brandNewRoot type="1" name="blah">
<blablah desc="Material" value="10"></blablah>
</brandNewRoot>