从 dataweave 中的消息中删除这些 html 名称

问题描述 投票:0回答:1

如何从消息中删除它,我只能将其描述为 html 名称,如 & 或 <

不使用替换功能可以吗?

示例消息:

{
    "message": "Hello world &amp; welcome"
}

预期输出:

{
    "message": "Hello world & welcome"
}
mule dataweave mulesoft
1个回答
0
投票

如果幸运的话,这些是 XML 实体。有 5 个 XML 实体与数百个 HTML 实体。

目前 DataWeave 中没有内置函数来解析 XML 或 HTML 实体。我使用

replace()
编写了一个纯 DataWeave 解决方案,其中实体在代码中未固定,从而可以根据需要灵活地修改实体列表。此方法也适用于任何需要替换的任意字符串列表。一个小技巧是使用
reduce()
为每个实体应用
replace()
,而不是使用来累积值。

我还使用更新运算符来更新消息的特定密钥。

脚本:

%dw 2.0
output application/json
var xmlEntities={
    "&amp;": "&",
    "&lt;": "<",
    "&gt;": ">",
    "&apos;": "'",
    "&quot;": "\""
}

fun replaceEntities(s: String, entities)=
    entriesOf(entities) reduce ((item, acc = s) -> acc replace item.key with(item.value))
---
payload update {
    case m at .message -> replaceEntities(m, xmlEntities)
}

输入:

{
  "message": "Hello world &amp; welcome"
}

输出:

{
  "message": "Hello world & welcome"
}
© www.soinside.com 2019 - 2024. All rights reserved.