如何转义xml字符

时间:2018-09-28 19:30:04

标签: mule dataweave

如何使用MEL或Dataweave对“ <”和“>”进行换行?

在原始xml下面

<dem>
                <action dos="600" nom="infos_infinity">
                    <entite nom="GetAccount" lire_tout="oui">
                        <groupe_filtres op="ET">
                            <filtre op="OU">
                                <critere nom="Equal_TIERS">
                                    <param><![CDATA[C0000033]]></param>
                                </critere>
                                <critere nom="Equal_TIERS">
                                    <param><![CDATA[C0000016]]></param>
                                </critere>
                            </filtre>
                            <filtre op="ET">
                                <critere nom="Equal_DOS">
                                    <param><![CDATA[600]]></param>
                                </critere>
                            </filtre>
                        </groupe_filtres>
                        <tri nom="BY_PK" />
                    </entite>
                </action>
            </dem>

和预期的XML

<web:param>&lt;dem&gt;
                &lt;action dos="600" nom="infos_infinity"&gt;
                    &lt;entite nom="GetAccount" lire_tout='oui'&gt;
                        &lt;groupe_filtres op='ET'&gt;
                            &lt;filtre op='OU'&gt;
                                &lt;critere nom="Equal_TIERS"&gt;
                                    &lt;param&gt;
                                        &lt;![CDATA[C0000033]]&gt;
                                    &lt;/param&gt;
                                &lt;/critere&gt;
                                &lt;critere nom="Equal_TIERS"&gt;
                                    &lt;param&gt;
                                        &lt;![CDATA[C0000016]]&gt;
                                    &lt;/param&gt;
                                &lt;/critere&gt;
                            &lt;/filtre&gt;
                            &lt;filtre op='ET'&gt;
                                &lt;critere nom="Equal_DOS"&gt;
                                    &lt;param&gt;
                                        &lt;![CDATA[600]]&gt;
                                    &lt;/param&gt;
                                &lt;/critere&gt;
                            &lt;/filtre&gt;
                        &lt;/groupe_filtres&gt;
                        &lt;tri nom="BY_PK" /&gt;
                    &lt;/entite&gt;
                &lt;/action&gt;
            &lt;/dem&gt;</web:param>

我试图用“ <”替换“ <”,但是看起来dataweave只能替换字符串,因为我收到了xml,所以没有用。

是否可以在不创建Java代码或Groovy代码的情况下进行转换?

1 个答案:

答案 0 :(得分:2)

是的,您可以使用MEL并将传入的有效负载设置为字符串值。以下是示例流程,但重要的部分是带有MEL表达式#[message.payloadAs(System.String)]

的Set Payload组件
<flow name="/xml-encoding">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/xml-encoding" doc:name="HTTP"/>
    <set-payload value="&lt;dem&gt;
            &lt;action dos=&quot;600&quot; nom=&quot;infos_infinity&quot;&gt;
                &lt;entite nom=&quot;GetAccount&quot; lire_tout=&quot;oui&quot;&gt;
                    &lt;groupe_filtres op=&quot;ET&quot;&gt;
                        &lt;filtre op=&quot;OU&quot;&gt;
                            &lt;critere nom=&quot;Equal_TIERS&quot;&gt;
                                &lt;param&gt;&lt;![CDATA[C0000033]]&gt;&lt;/param&gt;
                            &lt;/critere&gt;
                            &lt;critere nom=&quot;Equal_TIERS&quot;&gt;
                                &lt;param&gt;&lt;![CDATA[C0000016]]&gt;&lt;/param&gt;
                            &lt;/critere&gt;
                        &lt;/filtre&gt;
                        &lt;filtre op=&quot;ET&quot;&gt;
                            &lt;critere nom=&quot;Equal_DOS&quot;&gt;
                                &lt;param&gt;&lt;![CDATA[600]]&gt;&lt;/param&gt;
                            &lt;/critere&gt;
                        &lt;/filtre&gt;
                    &lt;/groupe_filtres&gt;
                    &lt;tri nom=&quot;BY_PK&quot; /&gt;
                &lt;/entite&gt;
            &lt;/action&gt;
        &lt;/dem&gt;" mimeType="text/xml" doc:name="Set Payload"/>
    <set-payload value="#[message.payloadAs(System.String)]" doc:name="Set Payload"/>
    <dw:transform-message doc:name="Transform Message">
        <dw:set-payload><![CDATA[%dw 1.0
            %output application/xml
            ---
            {
                'web:param': payload
            }]]></dw:set-payload>
    </dw:transform-message>
</flow>