如何在KQL的extractjson函数中引用以@开头的XML属性
Azure KQL中访问XML转换后带@前缀属性的正确方法
问题原因
parse_xml将XML转换为JSON结构时,XML元素的属性会自动加上@前缀作为键名。extractjson的JSON路径语法不支持直接通过点式写法访问带特殊符号的键名,因此直接写$.NetAmount.@currency会触发语法错误。
解决方法
方法1:修改extractjson的路径写法
包含特殊符号的键名需要用方括号+引号包裹,路径字符串写法调整如下:
let input_xml="<NetAmount currency=\"USD\">150.00</NetAmount>"; let sJson=tostring(parse_xml(input_xml)); let amount=extractjson("$.NetAmount.#text", sJson); // 带@的属性名用方括号包裹 let sCurrency=extractjson("$.NetAmount['@currency']", sJson); print input_xml, amount, sJson, sCurrency;
方法2:直接使用动态类型访问(更推荐)
parse_xml本身返回的是dynamic类型,无需转字符串调用extractjson,可直接访问属性,性能更高且写法更简洁:
let input_xml="<NetAmount currency=\"USD\">150.00</NetAmount>"; let xmlObj = parse_xml(input_xml); let amount = xmlObj.NetAmount.["#text"]; let sCurrency = xmlObj.NetAmount.["@currency"]; print input_xml, amount, sCurrency;
内容的提问来源于stack exchange,提问作者Ian Jarvis
相关产品推荐
相关产品推荐

