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