【问题标题】:Formatting IMPORTXML Xpath query into readable data for Google Sheets将 IMPORTXML Xpath 查询格式化为 Google 表格的可读数据
【发布时间】:2021-12-15 13:00:58
【问题描述】:

我正在将 XML 数据导入到具有以下结构的 google 工作表中: 编辑:网址:https://sonicstate.com/news/tools/revive_stats/client_camp_3785.xml

<data>
    <campaignId>15802</campaignId>
    <campaignName>Some name</campaignName>
      <startDate>
       <year>2021</year>
       <month>12</month>
       <day>02</day>
     </startDate>
     <endDate>
       <year>2021</year>
       <month>12</month>
       <day>13</day>
     </endDate>
</data>
<data>
.... another record
</data>

我希望将多行的结果与连接的日期值一起导入,以便它们可以出现在我可以查询的工作表中可管理的行中,而其他值将出现在它们自己的单元格中,每条记录都有一行。 例如

15802 |一些名字 | 2021/12/02 | 2021/12/13

15803 |别名 | 2021/11/30 | 2021/12/04

我试过了:

IMPORTXML("myurl" , "//data/campaignId | //data/campaignName | //data/startDate/year | //data/startDate/month|//data/startDate/day")

但每个值都返回单独的行,其中包含年、月、日的单元格 例如:

15802
Some Name
Year | Month | Day
15802
Another Name
Year | Month | Day
etc

我也试过了:


IMPORTXML("myurl" , "concat(//data/campaignId , //data/campaignName , //data/startDate/year,'/', //data/startDate/month,'/',//data/startDate/day")

但这只会返回一条记录。我正在努力寻找合适的术语来搜索我想要实现的目标。 Sheets XMLIMPORT 也使用 XPath 1.0,这限制了可用的功能

【问题讨论】:

  • 分享网址...
  • 已添加到问题中。

标签: google-sheets xpath split google-query-language textjoin


【解决方案1】:

试试这个

在 A1 中:您的网址

在 A2 中:你的功能没有任何改变

在 B1 中:在每个项目请求 5 个值时放入 5 个

在 B2 中:

=ARRAYFORMULA(VLOOKUP(SEQUENCE(ROUNDUP(COUNTA(A2:A)/B1),B1,ROW(A2)),{ROW(A2:A),A2:A},2,0))

https://docs.google.com/spreadsheets/d/1nFcPgXgRc11-WWICG8Y8KEsB4qAoOt1lIbptHzXdC4M/edit?usp=sharing

【讨论】:

    【解决方案2】:

    尝试:

    =INDEX({IMPORTXML(A1, "//data/campaignId"),
     IMPORTXML(A1, "//data/campaignName"), 
     IMPORTXML(A1, "//data/startDate/day")&"/"&
     IMPORTXML(A1, "//data/startDate/month")&"/"&
     IMPORTXML(A1, "//data/startDate/year")})
    

    【讨论】:

    • 谢谢,这当然可以,但是由于此表中已经存在 IMPORTXML 的数量,它可能会使请求的数量超载,我已经看到一些加载问题,并且正在寻找一种方法来减少该函数的调用次数
    【解决方案3】:

    尝试:

    =INDEX(SUBSTITUTE(TRIM(SPLIT(FLATTEN(SPLIT(QUERY(FLATTEN(QUERY(TRANSPOSE(
     IFERROR(IF(0=MOD(ROW(A:A)-1, 5)-{0, 1, 4, 3, 2}, {"♦","","","",""}&TEXT(
     IMPORTXML(A1, "//data/campaignId|//data/campaignName|//data/startDate/year|//data/startDate/month|//data/startDate/day"), 
     {"@","@","@","@","@"})&{"♠","♠","","♣","♣"}, ))),,9^9)),,9^9), "♦")), "♠")), "♣ ", "/"))
    

    formula explanation


    更短的效果:

    =INDEX(SUBSTITUTE(TRIM(SPLIT(FLATTEN(SPLIT(QUERY(IFNA(
     CHOOSE(MATCH(MOD(SEQUENCE(999)-1, 5), {0, 1}), "♦", )&
     IMPORTXML(A1, "//data/campaignId|//data/campaignName|//data/startDate/year|//data/startDate/month|//data/startDate/day")&
     CHOOSE(MATCH(MOD(SEQUENCE(999)-1, 5), {0, 1, 2, 3, 4}), "♠","♠","♣","♣","")),,9^9), "♦")), "♠")), "♣ ", "/"))
    

    【讨论】:

    • 哇!那是激烈的!它有效(需要一段时间才能填充)我需要弄清楚如何扩展它以提取更多数据 - 我需要一点时间才能弄清楚发生了什么,但这是一个出色的单一请求解决方案。
    • 好的,我需要在其中为每一行添加结束日期(也已格式化)和展示次数值,但是,我无法破译你所做的事情,真让我感到羞耻!我想我应该能够从我得到的任何答案中弄清楚这一点,但你的专业知识远远超出了我的范围。
    • 太棒了,非常感谢您的帮助,我会看看并找出我需要什么。非常感谢
    • 绝对聪明/聪明!
    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多