有没有办法使用 Google Sheets 的 IMPORTXML 函数一次导入两个查询?

Is there a way to use the IMPORTXML function of Google Sheets to import two queries at once?

在 Google 表格中,我正在开发一种工具,用于将有关某些美国国会选区的信息与其各自的国会议员相关联。为了便于更新有关哪些代表服务于哪些选区的信息,我选择使用 IMPORTXML 函数来检索 up-to-date 成员和选区列表。

幸运的是,US House Clerk 发布了一份 up-to-date xml file,其中包含我需要的所有信息。虽然我仍在尝试掌握 Sheets 中的 xpath 查询,但我认为我已经掌握了如何将其应用于该项目的基本知识。我发现我可以使用以下函数来检索州和国会选区信息:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict")

这是函数 returns:

的数据

显然,所有 435 个选区(实际上是 441 个,因为它也包括 non-voting 代表)的结果仍在继续,我可以处理这个问题。我 运行 遇到的问题是当我尝试使用以下函数导入众议院议员的姓名时:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/member-info/namelist")

这就是那个函数 returns:

再一次,结果继续并包括每个成员。但是,由于一些空缺,目前众议院没有 435 名议员(441 名包括代表)。检索成员姓名的 IMPORTXML 函数只返回它能找到的 438 个姓名。

这意味着我无法通过简单地在两个相邻列中使用两个 IMPORTXML 调用(一个带有 state/district,另一个带有名称)轻松地将会员关联到一个地区,因为列表不't排队,可以在栏目底部看到:

我做了一些挖掘,了解到我可以通过在查询之间添加 | 来在一个 IMPORTXML 调用中使用两个 xpath 查询。使用前面函数的 xpath 查询执行此操作,IMPORTXML 调用如下所示:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict | //member/member-info/namelist")

它 returns 是一个单独的列,其中 state/district 与这样的名称交错排列:

但有趣的是,当我这样做时,名称与他们的地区恰当地配对;当有空位时,函数导入分区,跳过non-existent名称,导入下一个分区,然后是下一个名称。因此,当涉及到空置区时,输出如下(突出显示空置区):

但是,要使其有用,我真的需要将这些数据分为两列,一列包含 state/district 数据,另一列包含该地区各自的会员姓名。我正在尝试尽可能多地了解这个问题,但这超出了我过去尝试过的范围,well-outside 我的舒适区。这就是我到目前为止的立场,在此方面的任何帮助将不胜感激。

好吧,我想在沉思之后,我想出了一个可行的解决方案(有点不雅,但它会完成工作)。

因此,使用带有两个查询的 IMPORTXML 调用给出了正确的顺序,但不是正确的间距。我们可以在另一列中做的是检查每个单元格中字符串的最后两个字符是否可以转换为数字。如果可以,那么这个值必须是State/District,我们将return那个值。这是我使用的公式:

=ARRAYFORMULA(IF(ISNUMBER(VALUE(RIGHT(E3:E,2))),E3:E,""))

然后在下一列中,我们做同样的事情,除了我们 return 第一列中没有通过测试的单元格。但这里的诀窍是我实际上不得不将这个公式向上偏移一排,因为这样它将 return 名称与他们的地区在同一行。这是我为此使用的公式:

=ARRAYFORMULA(IF(ISNUMBER(VALUE(RIGHT(E3:E,2))),"",E3:E))

在这里你可以看到它起作用了;名字排成一行,有空位的地方有空格:

然后为了消除条目之间所有多余的行,我们可以像这样过滤它们:

=FILTER(F3:G,F3:F<>"")

我们剩下的是两列,一列是 state/district 数据,另一列是相应代表的姓名:

只是想更新我发现的内容,以防其他人遇到类似的问题。