1 votes

Parsing google feed with linq to xml

J'essaie d'analyser le flux XML que j'obtiens via l'API Google Contacts avec LINQ 2 XML. Voici à quoi ressemble le flux :

<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> 

J'ai essayé un certain nombre de choses avec linq 2 sql, mais elles n'ont pas fonctionné. Même ce simple code ne fonctionne pas :

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");
    }
}

Le problème est que l'id et le feed sont tous deux nuls. Qu'est-ce qui ne va pas ?

2voto

Robaticus Points 14665

Vous devrez spécifier l'espace de noms de l'élément dans votre Xname :

           XElement feed = doc.Element("{http://www.w3.org/2005/Atom}feed");
            if (feed == null)
            {
                Console.WriteLine("feed not found");
            }

1voto

Vijayakumar Points 11
<?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;
?>

0voto

Thomas Levesque Points 141081

Vous n'avez pas besoin de Linq to XML pour cela : vous pouvez utiliser la fonction SyndicationFeed à la place

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X