如何使用 dataweave 获取 XML 消息有效负载的大小(以 KB 为单位)

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

我需要计算传入有效负载的大小(以 KB 为单位)。传入的有效负载是 XML。我尝试使用 sizeOf(payload.^raw)/1000 但这仅适用于 JSON 格式,不适用于 XML 格式。

xml mule dataweave mule4 mule-component
2个回答
-1
投票

在此示例中,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
}

-1
投票

您无法直接测量输入,因为它已经解析为表示原始 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}
© www.soinside.com 2019 - 2024. All rights reserved.