我正在尝试使用LINQ 2 XML解析通过Google Contacts API获得的XML Feed。这就是Feed的样子:
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:gContact="http://schemas.google.com/contact/2008" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005">
<id>myemailaddress@gmail.com</id>
<updated>2010-06-11T17:37:06.561Z</updated>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#contact" />
<title type="text">My Contacts</title>
<link rel="alternate" type="text/html" href="http://www.google.com/" />
<link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.google.com/m8/feeds/contacts/myemailaddress%40gmail.com/full" />
<link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml" href="http://www.google.com/m8/feeds/contacts/myemailaddress%40gmail.com/full" />
<link rel="http://schemas.google.com/g/2005#batch" type="application/atom+xml" href="http://www.google.com/m8/feeds/contacts/myemailaddress%40gmail.com/full/batch" />
<link rel="self" type="application/atom+xml" href="http://www.google.com/m8/feeds/contacts/myemailaddress%40gmail.com/full?max-results=25" />
<author>
<name>My NAme</name>
<email>myemailaddress@gmail.com</email>
</author>
<generator version="1.0" uri="http://www.google.com/m8/feeds">Contacts</generator>
<openSearch:totalResults>19</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>25</openSearch:itemsPerPage>
<entry>
<id>http://www.google.com/m8/feeds/contacts/myemailaddress%40gmail.com/base/0</id>
<updated>2010-01-26T20:34:03.802Z</updated>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#contact" />
<title type="text">Contact name</title>
<link rel="http://schemas.google.com/contacts/2008/rel#edit-photo" type="image/*" href="http://www.google.com/m8/feeds/photos/media/myemailaddress%40gmail.com/0/O-ydnzWMJcfZWqT-6gGetw" />
<link rel="http://schemas.google.com/contacts/2008/rel#photo" type="image/*" href="http://www.google.com/m8/feeds/photos/media/myemailaddress%40gmail.com/0" />
<link rel="self" type="application/atom+xml" href="http://www.google.com/m8/feeds/contacts/myemailaddress%40gmail.com/full/0" />
<link rel="edit" type="application/atom+xml" href="http://www.google.com/m8/feeds/contacts/myemailaddress%40gmail.com/full/0/1264538043802000" />
<gd:email rel="http://schemas.google.com/g/2005#other" address="someaddress@gmail.com" primary="true" />
</entry>
</feed>
我用linq 2 sql尝试了很多东西,但它们没有用。即使这个简单的代码剪断也不起作用:
using (FileStream stream = File.OpenRead("response.xml"))
{
XmlReader reader = XmlReader.Create(stream);
XDocument doc = XDocument.Load(reader);
XElement feed = doc.Element("feed");
if (feed == null)
{
Console.WriteLine("feed not found");
}
XElement id = doc.Element("id");
if (id == null)
{
Console.WriteLine("id is null");
}
}
问题是这里的id和feed都为null。我做错了什么?
答案 0 :(得分:2)
您需要在Xname中指定元素的命名空间:
XElement feed = doc.Element("{http://www.w3.org/2005/Atom}feed");
if (feed == null)
{
Console.WriteLine("feed not found");
}
答案 1 :(得分:1)
<?php
$token_key = $this->params['url']['token'];
$google_contacts_xml_feed = simplexml_load_file('https://www.google.com/m8/feeds/contacts/default/full?oauth_token='.$token_key);//'.$id);
$gmail_name = $google_contacts_xml_feed->author->name;
$gmail_id = $google_contacts_xml_feed->author->email;
echo $gmail_id;
echo $gmail_name;
?>
答案 2 :(得分:0)
您不需要Linq to XML:您可以使用SyndicationFeed
类来代替