在Mule流中重命名XMLnode

时间:2016-06-29 07:16:11

标签: xml mule dom4j

我有一个带有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>

此致

3 个答案:

答案 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>