如何转义xml字符

乌戈·瓜泽利

如何使用 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代码的情况下转换它?

芳香

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章