如何从消息中删除它,我只能将其描述为 html 名称,如 & 或 <
不使用替换功能可以吗?
示例消息:
{
"message": "Hello world & welcome"
}
预期输出:
{
"message": "Hello world & welcome"
}
如果幸运的话,这些是 XML 实体。有 5 个 XML 实体与数百个 HTML 实体。
目前 DataWeave 中没有内置函数来解析 XML 或 HTML 实体。我使用
replace()
编写了一个纯 DataWeave 解决方案,其中实体在代码中未固定,从而可以根据需要灵活地修改实体列表。此方法也适用于任何需要替换的任意字符串列表。一个小技巧是使用 reduce()
为每个实体应用 replace()
,而不是使用来累积值。
我还使用更新运算符来更新消息的特定密钥。
脚本:
%dw 2.0
output application/json
var xmlEntities={
"&": "&",
"<": "<",
">": ">",
"'": "'",
""": "\""
}
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 & welcome"
}
输出:
{
"message": "Hello world & welcome"
}