我有一个 json 有效负载,其中包含一些 ascii 字符,如下所示。
Blades with \u000BMahogony/ Natural Wood Fin
我们需要将上述数据以XML形式传递给下游系统。我正在尝试使用
output application/xml escapeGT=true
它在 dataweave playground 中工作,就像在任何工作室中一样,它给出错误提示
escapeGT is not valid. Valid options are...
需要知道可以使用哪个函数,让mule可以在不修改接收到的数据的情况下将数据发送到下游系统。
Mule运行时版本:4.3.0EE XML代码:
%dw 2.0
var batchSize = p('product.batchSize')
var mapPayload = if (batchSize == '1') [payload] else payload
output application/xml escapeGT=true
---
ItemList: {( mapPayload map {
Item @(
ItemID: $.ItemID,
SyncTS: vars.timeStamp....
escapeGT writer 属性仅在 Mule 4.4 或更高版本的 DataWeave 2.4 中可用。 previous version 的文档显示它不存在。即使您升级了,也不清楚为什么这个选项适用于这种情况。该选项不适用于此类字符。在我看来,它似乎是一种未记录的用法,可以在未来的版本中删除或修复。
您尝试写入的字符在 XML 1.1 中无效。 DataWeave 因尝试写入无效字符而抛出错误。
一个选项是通过用空字符串替换它来删除字符,或者用普通的空白字符替换它。您丢失了字符,但输出将是有效的 XML。
%dw 2.0
output application/xml
import * from dw::core::Strings
---
{
x: replaceAll(payload.description, "\u000B", "")
}
如果您希望保留字符数,可以将其替换为普通空格字符:
replaceAll(payload.description, "\u000B", " ")
另一种可能性是对字符进行编码,以便 XML 解析器可以接受它:
%dw 2.0
output application/xml
import * from dw::core::Strings
---
{
x: replaceAll(payload.description, "\u000B", "")
}
这个解决方案的优点是它适用于 DataWeave 编写它,如果你想将它用作另一个 DataWeave 脚本的输入。话虽如此,它似乎并没有重新生成原始角色,所以它并不完美。实际识别如此编码的字符的第三方解析器可能仍然会失败。
不推荐将输出值设置为 CDATA。它可以防止错误发生,但输出仍然无效,并且将作为 DataWeave 的输入失败。