Google Spreadsheets ImportXML分为2列

时间:2014-05-06 13:15:28

标签: xml xpath google-apps-script google-sheets

我有一个xml文档,如下所示:

<Time>
<ID>22653948</ID>
<Job>
<ID>J000010</ID>
<Name>NEP0001_Evesham</Name>
</Job>
<Task>
<ID>12379652</ID>
<Name>Assemble</Name>
</Task>
<Staff>
<ID>68684</ID>
<Name>Ruiardh Robinson</Name>
</Staff>
<Date>2012-10-29T00:00:00</Date>
<Minutes>180</Minutes>
<Note/>
<Billable>true</Billable>
</Time>

该文档包含多个<Time>条目,我正在尝试执行的操作是导入每个任务的所有<Date><Minutes>字段,仅限日期包含字符串“2014 ”。我可以使用以下方式导入2014年的所有日期字段:

=QUERY(ImportXML('Time Data'!F2, "//Time/Date"), "SELECT * WHERE Col1 contains '2014-04'")

但是我无法获得相同条目的相应分钟字段,我知道您可以使用|运算符执行多个xpath查询,我尝试了以下但是它不起作用,因为它只返回由于某种原因,第一个条目的第一个日期字段。

=QUERY(ImportXML('Time Data'!F2, "//Time/Date | //Time/Minutes"), "SELECT * WHERE Col1 contains '2014-04'")

有人知道如何只在日期包含“2014”的情况下导入两列吗?

1 个答案:

答案 0 :(得分:3)

您可以使用:

//Time/*[self::Date or self::Minutes]

然而谷歌读取XML的方式,这将填充行而不是列,所以如果您在A1中有查询,结果将是

   A                    B                  C     ...
1 2012-10-29T00:00:00
2 180

因此,如果您希望将其放在列中,则可以在B1中添加使用//Time/Minutes的第二个ImportXML查询

然而,我只是在另一个工作表中导入整个XML,然后查询它。

顺便说一句,你也可以使用//Time[starts-with(Date, '2014')]而不是在QUERY中包装ImportXML