我需要计算传入有效负载的大小(以 KB 为单位)。传入的有效负载是 XML。我尝试使用 sizeOf(payload.^raw)/1000 但这仅适用于 JSON 格式,不适用于 XML 格式。
在此示例中,xmlPayload 表示传入的 XML 负载。我们使用 write 函数将 XML 有效负载转换为 XML 格式的字符串 (application/xml)。然后,我们使用 sizeOf 计算字符串的大小并将其除以 1000 以获得以千字节 (KB) 为单位的大小。
您可以将 xmlPayload 替换为您的实际 XML 有效负载,结果将是有效负载的大小(以 KB 为单位)。
%dw 2.0
output application/json
var xmlPayload = "<root><element1>Value 1</element1><element2>Value 2</element2></root>"
var xmlString = write(payload, "application/xml")
var sizeInKB = sizeOf(xmlString) / 1000
---
{
"sizeInKB": sizeInKB
}
您无法直接测量输入,因为它已经解析为表示原始 XML 输入的 DataWeave 对象。您可以将该对象转换为 XML 字符串,然后将该字符串转换为二进制,以便使用
sizeOf()
函数来测量字节数。否则,如果在字符串上使用它,它将返回字符数,该数不完全相同。在 Unicode 中,存在多字节字符,它们算作 1 个字符,但需要超过 1 个字节来表示。
需要注意的是,大小将根据 write() 函数的输出计算得出,该函数将转换数据并添加缩进并更改结构的某些内容,因此它可能与输入不完全相同。
%dw 2.0
output application/java
var someXml = read("<root><element1>Value 1</element1><element2>あ</element2></root>", "application/xml")
fun sizeInBytes(xml)=sizeOf(write(xml,"application/xml") as Binary)
fun sizeInKB(xml)=sizeInBytes(xml)/1024
---
{
sizeOf: sizeOf(write(someXml,"application/xml")),
sizeInBytes: sizeInBytes(someXml),
sizeInKB: sizeInKB(someXml)
}
输出:
{sizeOf=109, sizeInBytes=111, sizeInKB=0.1083984375}