Google Spreadsheet ImportXML xpath问题

时间:2015-02-11 16:24:17

标签: xml xpath google-sheets google-sheets-importxml

我尝试将此XML Feed导入Google电子表格: http://cloud.tfl.gov.uk/TrackerNet/LineStatus

但我似乎无法为要解析的Feed获取正确的xPath。

我试过了:

=importxml("http://cloud.tfl.gov.uk/TrackerNet/LineStatus","/ArrayOfLineStatus")

=importxml("http://cloud.tfl.gov.uk/TrackerNet/LineStatus","/arrayoflinestatus//linestatus[1]@statusdetails")    
其他几个但没有运气。我一直在使用http://xmltoolbox.appspot.com/xpath_generator.html来尝试获取Xpath。

编辑:

这是XML的编辑版本:

<ArrayOfLineStatus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns="http://webservices.lul.co.uk/">
<LineStatus ID="0" StatusDetails="">
<BranchDisruptions/>
<Line ID="1" Name="Bakerloo"/>
<Status ID="GS" CssClass="GoodService" Description="Good Service"     IsActive="true">
<StatusType ID="1" Description="Line"/>
</Status>    
<LineStatus ID="81" StatusDetails="">
<BranchDisruptions/>
<Line ID="81" Name="DLR"/>
<Status ID="GS" CssClass="GoodService" Description="Good Service" IsActive="true">
<StatusType ID="1" Description="Line"/>
</Status>
</LineStatus>
</ArrayOfLineStatus>    

2 个答案:

答案 0 :(得分:1)

您的ImportXML()来电不起作用,因为从谷歌的角度来看,给定网址的输出不是格式良好的XML。 我多次遇到此问题,因为没有工具/选项可用于将传入数据预处理为Google电子表格接受的格式,您必须放弃。
(请注意,我从未说过您的文件有任何问题。我认为Google表格对xml的处理远非理想,但不是我能解决的问题)
您现在的选择是:

  1. 使用互联网上许多用户创建的工作表脚本/功能之一来解析您的XML。
  2. 使用其他import...()函数之一(例如=IMPORTDATA("http://cloud.tfl.gov.uk/TrackerNet/LineStatus"))并对结果进行后处理
  3. 使用状态检查器的javascript版本并将其删除:(=IMPORTHTML("http://www.tfl.gov.uk/tfl/syndication/feeds/esubs/portrait-27.html","table",1)

答案 1 :(得分:0)

OP提供的公式结果为空,因为文件使用命名空间。

注意:IMPORTXML使用xPath 1.0

尝试以下方法:

  1. 创建新文件。
  2. 添加以下内容。
  3. A1:XML文件的URL A2:xPath查询。仔细检查结果是否为空 A3:=IMPORTXML(A1,A2)

    示例1:以下内容不使用position而不是node-name。

        +   ---------------------------------------------   +
        |                        A                          |
        +   ---------------------------------------------   +
      1 |   http://cloud.tfl.gov.uk/TrackerNet/LineStatus   |
      2 |   /*/*[position()<10]/@ID                         |
      3 |                                               0   |
      4 |                                               1   |
      5 |                                              10   |
      6 |                                               2   |
      7 |                                               8   |
      8 |                                               4   |
      9 |                                               9   |
     10 |                                               5   |
     11 |                                               6   |
        +   ---------------------------------------------   +
    

    示例2:以下使用函数local-name()

    来使用测试谓词
        +   ---------------------------------------------   +
        |                        A                          |
        +   ---------------------------------------------   +
      1 |   http://cloud.tfl.gov.uk/TrackerNet/LineStatus   |
      2 |   //*[local-name() = 'Line']/@Name                |
      3 |   Bakerloo                                        |
      4 |   Central                                         |
      5 |   Circle                                          |
      6 |   District                                        |
      7 |   Hammersmith and City                            |
      8 |   Jubilee                                         |
      9 |   Metropolitan                                    |
     10 |   Northern                                        |
     11 |   Piccadilly                                      |
     12 |   Victoria                                        |
     13 |   Waterloo and City                               |
     14 |   Overground                                      |
     15 |   TfL Rail                                        |
     16 |   DLR                                             |
     17 |   Trams                                           |
        +   ---------------------------------------------   +
    

    请参阅上述示例:File