Power Query 导入XML数据需理解其层级结构,从文件或Web导入后逐层展开Record/List,区分Attribute(@符号)与Element,处理命名空间、大小写、空值等问题,再清洗转为正式表格。

Power Query 导入 XML 数据其实很直接,关键在于理解 XML 的结构特点和 Power Query 的解析逻辑。XML 是层级式数据(比如有父节点、子节点、属性),Power Query 会自动将其展开为表格形式,但需要你手动选择要保留的层级和字段。
从文件导入 XML(最常用)
在 Excel 中:数据 → 获取数据 → 从文件 → 从 XML → 浏览选中你的 .xml 文件。Power Query 编辑器会自动加载并尝试解析根节点下的结构。如果 XML 有多层嵌套(如 Orders → Order → Item),它通常会展开到最内层重复项(比如所有 Item),这时你看到的是一张扁平化表格。
- 若第一层就显示“Record”或“List”,说明当前节点包含多个子节点或属性,点击右侧的展开图标(⎘)即可逐层展开
- 注意区分“Attribute”(带 @ 符号的列,对应 XML 属性,如
中的 id)和“Element”(普通子节点内容) - 展开后可右键列标题 → “删除其他列”,只保留需要的字段
从网页或 API 加载 XML(动态数据源)
适用于调用返回 XML 格式的接口(如某些老系统、政府公开数据)。选择:数据 → 获取数据 → 从 Web → 粘贴 URL。Power Query 会尝试识别响应格式;若未自动按 XML 解析,可在高级编辑器里把源代码中的 Web.Contents(...) 包裹成 Xml.Tables(Web.Contents(...))。
- 遇到 HTTPS 证书或重定向问题时,可在 Web.Contents 中添加选项:[Timeout=#duration(0,0,0,30), ManualStatusHandling={404,500}]
- 如果返回的是单个 XML 元素(如
success ),用 Xml.Document() 更合适,再用 Record.ToTable 提取值
处理常见 XML 结构问题
不是所有 XML 都规整。比如同一层级下子节点名称不统一(Price 和 price 并存)、存在命名空间(xmlns="http://...")、或混合文本与子节点,这些都会导致展开失败或列丢失。
- 命名空间问题:在高级编辑器中,先用 Xml.Document(Binary.FromText(xmlText)) 加载,再用 Xml.Namespace("http://...") 显式声明,或用 Text.Remove 函数提前删掉 xmlns 属性
- 大小写不一致:用“转换”→“更改为小写”统一列名,再合并列或条件列处理
- 空节点或缺失字段:展开后会出现 null,可用“替换值”填默认值,或用 try ... otherwise ... 在自定义列中容错
导入后清洗与转为正式表格
XML 导入后仍是查询状态,需进一步整理才能用于分析。典型操作包括:重命名列(双击列名)、调整数据类型(点击列标题旁的图标选“整数”“日期”等)、筛选非空行、按某列分组聚合(如统计每个 Category 下的 Product 数量)。
- 若原始 XML 中日期是 "2024-03-15T08:30:00" 这种 ISO 格式,Power Query 能自动识别为 datetime;若为中文格式(如“2024年3月15日”),需用 Date.FromText 配合文化参数
- 完成所有步骤后点左上角“关闭并上载”,数据就会进入 Excel 工作表;勾选“仅创建连接”可不落地,适合做后台刷新










