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

Excel Power Query按节点名筛选导入XML数据的技术问询

Excel Power Query 处理XML数据的实用方案

场景1:简单XML数据提取(跳过指定节点,筛选目标节点)

假设你的XML结构类似:

<Root>
  <Agency Name="SampleAgency" />
  <Site Name="SiteA" />
  <Site Name="SiteB" />
  <Site Name="SiteC" />
</Root>

要跳过<Agency>节点,提取所有<Site>的Name属性,可修改Power Query代码如下:

let
    Source = Xml.Tables(File.Contents("C:\your-xml-file.xml")),
    RootNodes = Source{0}[Children],
    FilteredSites = Table.SelectRows(RootNodes, each [Name] = "Site"),
    ExtractName = Table.SelectColumns(FilteredSites, {"Attributes"}),
    ExpandAttributes = Table.ExpandRecordColumn(ExtractName, "Attributes", {"Name"}, {"Site Name"})
in
    ExpandAttributes

场景2:复杂XML层级数据提取

假设你的XML结构类似:

<Measurement SiteName="MainSite">
  <DataSource Name="Temperature">
    <Data>
      <T>2024-05-20 12:00</T>
      <Value><25.3</Value>
    </Data>
    <Data>
      <T>2024-05-20 13:00</T>
      <Value><26.1</Value>
    </Data>
  </DataSource>
</Measurement>

要提取SiteName属性、DataSource的Name属性、<T>的时间值和带<符号的<Value>值,Power Query代码如下:

let
    Source = Xml.Tables(File.Contents("C:\complex-xml-file.xml")),
    MeasurementNode = Source{0},
    SiteName = MeasurementNode[Attributes][SiteName],
    DataSourceNode = MeasurementNode[Children]{0},
    DataSourceName = DataSourceNode[Attributes][Name],
    DataNodes = DataSourceNode[Children],
    FilteredData = Table.SelectRows(DataNodes, each [Name] = "Data"),
    ExpandDataChildren = Table.ExpandListColumn(FilteredData, "Children"),
    PivotNodes = Table.Pivot(ExpandDataChildren, List.Distinct(ExpandDataChildren[Name]), "Name", "Value"),
    AddMetaColumns = Table.AddColumn(PivotNodes, "Site Name", each SiteName),
    AddDataSourceColumn = Table.AddColumn(AddMetaColumns, "DataSource Name", each DataSourceName),
    ReorderColumns = Table.ReorderColumns(AddDataSourceColumn, {"Site Name", "DataSource Name", "T", "Value"})
in
    ReorderColumns

核心问题解答

1. 如何按节点名筛选XML数据?

Power Query会把XML解析为带Name字段的表格,每行对应一个XML节点。直接用Table.SelectRows过滤[Name]字段即可:

Table.SelectRows(YourNodeTable, each [Name] = "目标节点名")

如果是多层级节点,先通过[Children]字段定位到目标层级的节点列表,再执行筛选。

2. 如何提取单例节点的内容?

  • 提取属性:单例节点的属性存在[Attributes]记录中,直接通过字段名访问,比如Node[Attributes][AttributeName]
  • 提取节点文本:单例节点的文本存在[Value]字段中,叶子节点直接取Node[Value];有子节点的话,先定位到子节点再取[Value]
  • 保留特殊符号:Power Query默认不会转义XML中的特殊符号,直接提取[Value]就能保留原始内容(比如<25.3会完整保留)

内容的提问来源于stack exchange,提问作者Sir Swears-a-lot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:00:13