You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

q(KX)语言解析XML完成扁平化后无法提取数据该如何解决

q(KX)语言XML解析提取解决方案

你现有代码的file2: enlist file2存在逻辑错误,引用了未赋值的自身变量,无需做多余的enlist操作。以下是两种可落地的解析方案:

  • 方案一:内置XML解析函数(推荐,适配kdb+ 3.4及以上版本)
    内置.Q.xml函数可直接将XML字符串转为嵌套字典结构,无需手动处理标签匹配,代码如下:
/ 读取XML文件为单个连续字符串
xml_str: raze read0 `:File.xml
/ 解析XML为嵌套字典
xml_dict: .Q.xml xml_str
/ 提取food节点并转为结构化表格
food_tbl: flip value each xml_dict[`breakfast_menu;`food]
/ 可选:清理description字段的多余空白字符
food_tbl: update trim description from food_tbl

解析完成后可直接通过表格操作提取所需内容,例如:

  • 提取所有餐品名称:food_tbl[name]`

  • 筛选定价低于7美元的餐品:select from food_tbl where price like "$6.*" or price like "$5.*"

  • 筛选卡路里低于800的餐品:select from food_tbl where "I"$calories < 800

  • 方案二:正则匹配提取(兼容低版本kdb+)
    如果使用的kdb+版本不支持内置XML解析,可通过正则匹配提取标签内容:

/ 读取XML文件为单个连续字符串
xml_str: raze read0 `:File.xml
/ 匹配提取所有<food>节点内容块
food_pat: "<food>(.*?)</food>"
food_blocks: raze (1 _) each xml_str ssr food_pat
/ 定义字段提取函数
get_field: {[block;field] trim first block ssr ("<",string field,">(.*?)</",string field,">")}
/ 遍历所有块生成结构化表格
food_tbl: flip `name`price`description`calories ! get_field[;] each/[food_blocks;`name`price`description`calories]

两种方案最终都会生成结构化的表格数据,可直接按业务需求做后续计算、筛选操作。

内容的提问来源于stack exchange,提问作者Jim Macaulay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:15:04