GData电子表格和GSX命名空间

本文关键字:命名空间 GSX 电子表格 GData | 更新日期: 2023-09-27 17:50:24

我正在尝试以编程方式阅读谷歌电子表格。不幸的是,我不能使用GData库,因为平台是Windows Phone。

在使用列表API读取电子表格的内容之后,我得到了形式为

的xelement的单独行。
<entry xmlns="http://www.w3.org/2005/Atom">
  <id>https://spreadsheets.google.com/feeds/list/0At7MazQVk6r1dHNOLS02MmVONDdLSDRNSjVPcUZRb0E/1/private/values/chk2m</id>
  <updated>2011-04-16T06:23:48.922Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006" term="http://schemas.google.com/spreadsheets/2006#list" />
  <title type="text">0002</title>
  <content type="text">ssname: Some random address, latitude: 2.8595084738555, longtitude: 167.0312830513769, fuel: x, maintenance_2: x</content>
  <link rel="self" type="application/atom+xml" href="https://spreadsheets.google.com/feeds/list/0At7MazQVk6r1dHNOLS02MmVONDdLSDRNSjVPcUZRb0E/1/private/values/chk2m" />
  <gsx:stationid xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">PK0002</gsx:stationid>
  <gsx:ssname xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">Svs Stn</gsx:ssname>
  <gsx:address xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">Some random address</gsx:address>
  <gsx:tel xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">12345678</gsx:tel>
  <gsx:latitude xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">1.35</gsx:latitude>
  <gsx:longtitude xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">103.80312830513769</gsx:longtitude>
  <gsx:operatinghours xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"></gsx:operatinghours>
  <gsx:fuel xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">x</gsx:fuel>
  <gsx:fuel_2 xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"></gsx:fuel_2>
  <gsx:maintenance xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"></gsx:maintenance>
  <gsx:maintenance_2 xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">x</gsx:maintenance_2>
  <gsx:amenities xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"></gsx:amenities>
  <gsx:amenities_2 xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"></gsx:amenities_2>
</entry>

我只对以namespace开头的元素感兴趣。因此,我像这样声明命名空间,并检查每个子代是否匹配。

XNamespace gsx = "http://schemas.google.com/spreadsheets/2006/extended";
            IEnumerable<XElement> allItems = xe.Descendants();
            foreach (XElement xItem in allItems)
            {
                if (xItem.Name.NamespaceName == gsx.NamespaceName)
                {
                    Debug.WriteLine("$$$" + xItem);
                }
                else
                {
                    Debug.WriteLine("XXX" + xItem);
                }
            }

我确信有一种优雅的方法,将这个过滤器指定为x . descendants()方法的XName参数。有人能帮我一下吗?

GData电子表格和GSX命名空间

xe.Elements().Where(el => el.Name.Namespace == gsx)应该给您xe的所有子元素,这些元素位于您定义的gsx名称空间中。因此,这就是可能的,而不是将if语句放入foreach循环中,您可以简单地使用Where方法调用过滤元素(或根据需要筛选后代)。