Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

LINQ-to-XML i YouTube API feed - pitanje

[es] :: .NET :: LINQ-to-XML i YouTube API feed - pitanje

[ Pregleda: 521 | Odgovora: 6 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

deerbeer
Beograd

Član broj: 174418
Poruke: 421
*.adsl-1.sezampro.yu.

Sajt: www.xemico.net


Profil

icon LINQ-to-XML i YouTube API feed - pitanje21.05.2008. u 13:16
Treba mi efikasno parsiranje/citanje YouTube -api feed-a i pravljenje upita nad XML-om pomocu LINQ-a
Na primer :

Code:

WebClient client = new WebClient();
string address = @"http://gdata.youtube.com/feeds...art-index=1&max-results=10"
string fileName = Application.StartupPath + @"\" + "feeddata.xml";
try
{
   client.DownloadFile(address, fileName);
}
catch (WebException exc)
{
    MessageBox.Show("Cannot download file : " + exc.Message + " : " + address,
                                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return; 
}



Probao sam ovakav XML da ucitam u DataSet pomocu :
Code:

DataSet ds = new DataSet () ; 
ds.ReadXml (fileName) ; 

Medjutim kada referenciram tabelu "title" .NET baca exception da u datasetu postoje 2 takve tabele

Probao sam i sa generisanjem *.xsd sheme da bih mogao da provalim kakva je struktura XML fajla tj. koji entiteti postoje ...
Code:

DataSet ds = new DataSet () ; 
ds.ReadXml (fileName) ; 
ds.WriteXmlSchema(fileXmlSchema) ; 

Visual Studio je napravio xsd shemu al je takva relaciona struktura skroz necitljiva
i ne prepoznaje postojanje nekih polja u tabelama (mozda je problem sto je xml skroz "isharan" XSLT tagovima )

Sledeci pokusaj je bio sa XPath Query-ijem:
Code:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.SelectNodes (@"*/entry/media:group") ; 

medjutim i tu XmlDocument baca exception i ako je upit ispravan ( probao sam ovaj upit sa MSXML parserom u C++ -u i radi bez problema)
Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.

Da bi na kraju ucitao sve u XmlDocument pa isao redom :
Code:

   xmlDoc.LoadXml(fileName) ; 
   XmlElement xmlElem = xmlDoc.DocumentElement;
   xmlNodeList  = xmlElem.GetElementsByTagName("entry"); 
 if (xmlNodeList.Count > 0)
  {
     foreach(XmlNode xmlNode in xmlNodeList) 
        {
           for (int i = 0; i < xmlNode.ChildNodes.Count; i++)
            {
                XmlNode node =  xmlNode.ChildNodes[i];
                string strTitle = "";
                string strURL = "";
                string strImgPath = "";

                if (node.Name == "media:group")
                 {
                        XmlNodeList  xmlMediaNodes = node.ChildNodes;
                         foreach (XmlNode nodeInMedia in xmlMediaNodes)
                          {
                                if (nodeInMedia.Name == "media:title")
                                       strTitle = nodeInMedia.InnerText;
                                if (nodeInMedia.Name == "media:player")
                                       strURL = nodeInMedia.Attributes["url"].InnerText;    
                                if (nodeInMedia.Name == "media:thumbnail")
                                       strImgPath = nodeInMedia.Attributes["url"].InnerText;

                                if (strTitle != String.Empty && strURL != String.Empty && strImgPath != String.Empty)
                                 {
                                     EntryFeed feed = new EntryFeed(strURL, strTitle, strImgPath);
                                     m_aoFeeds.Add(feed);
                                     lstVideoFiles.Items.Add(feed.Title);
                                     break; 
                                            
                                  }
                           }
                   }
               }
      }
           
 }

E ovde bih voleo da vidim LINQ na delu a da ne moram da "burgijam" po XML dokumentu .
Da li postoji mogucnost da LINQ ili VS2008 "provali" o kakvoj je strukturi XML fajla je rec
tj. da bih mogao na najbrzi moguci nacin da napravim linq-upit koji ce mi vratiti listu video klipova sa youtube feed-a?

BTW : Koristim VS2005, imam VS2008 al' cekam testnu masinu u firmi jer mi se ne drzi 2 VS na jednoj masini

21.05.2008. u 13:16 

Djoks
Djordje Najdanovic
Software Engineer, Azalea Maritime
Herceg Novi

Član broj: 1630
Poruke: 133
*.crnagora.net.



Profil

icon Re: LINQ-to-XML i YouTube API feed - pitanje22.05.2008. u 09:27
Postoji, i zove se "XML to Schema tool" u izdanju za VB. Mislim da je sastavni dio SP1, a u protivnom se može preuzeti sa lokacije: http://msdn.microsoft.com/en-us/vbasic/bb840042.aspx

I ako ne programiraš u VB-u - možeš iskoristiti ovaj alat za generisanje xsd modela. Kad generišeš model na osnovu odgovarajućeg XML fajla - ostaje ti u kodu samo da pišeš nešto nalik ovome:

Code:

Dim feedXML As XDocument = XDocument.Load("http://youtube.com/rss/global/top_viewed_today_en_GB.rss")
Dim feeds = From feed in feedXML...<channel> Select feed...<title>.Value
MessageBox.Show(feeds.First.ToString)

itd.
22.05.2008. u 09:27 

deerbeer
Beograd

Član broj: 174418
Poruke: 421
*.adsl-4.sezampro.yu.

Sajt: www.xemico.net


Profil

icon Re: LINQ-to-XML i YouTube API feed - pitanje22.05.2008. u 09:57
Citat:
@Djoks
Postoji, i zove se "XML to Schema tool" u izdanju za VB. Mislim da je sastavni dio SP1, a u protivnom se može preuzeti sa lokacije: http://msdn.microsoft.com/en-us/vbasic/bb840042.aspx

Svaka cast....to je upravo ono sto mi je trebalo.
Hvala
22.05.2008. u 09:57 

Djoks
Djordje Najdanovic
Software Engineer, Azalea Maritime
Herceg Novi

Član broj: 1630
Poruke: 133
*.crnagora.net.



Profil

icon Re: LINQ-to-XML i YouTube API feed - pitanje22.05.2008. u 10:15
Ako imaš vremena, pogledaj i ovaj tutorial: http://msdn.microsoft.com/en-us/vbasic/bb887654.aspx (vezan je za taj tool i Intellisence uz XML uopšte).

BTW: Ja na mašini imam VS6, VS2003, VS2005 i VS2008 sve zajedno i ne prave problem ;-) Uostalom, ako budeš na toj istoj mašini želio da razvijaš BI za SQL Server - trebaće ti i VS2005 :-)
22.05.2008. u 10:15 

deerbeer
Beograd

Član broj: 174418
Poruke: 421
*.adsl-4.sezampro.yu.

Sajt: www.xemico.net


Profil

icon Re: LINQ-to-XML i YouTube API feed - pitanje22.05.2008. u 11:42
Dobar je tutorijal al ne videh nijedan INNER JOIN u njemu ...
Da li je moguce koristiti ovu kljucnu rec za upit ako imamo 2 xml namespace u projektu ?
Naravno da se podrazumeva prisustvo primarnih i spoljnih kljuceva u samom xml-u

Pitam ovo ne samo zbog dobijanja obicnih XML RSS feed-ova vec sta ako imamo slucaj
decentralizovane baze podataka cije ce tabele biti rashtrkane po nekim web-service-ima ili nekim feed-ovima ...
Nesto slicno kao sto je sam SQL server radio sa distributed query-ima
( npr. server1.db1.tabela1 INNER JOIN server2.db2.tabela2 ON ...)

Citat:

BTW: Ja na mašini imam VS6, VS2003, VS2005 i VS2008 sve zajedno i ne prave problem ;-)

Pa jedno vreme sam imao isti taj slucaj pa se desila havarija ..:)
Ali ne da mi djavo mira ..moracu da instaliram :)



22.05.2008. u 11:42 

Djoks
Djordje Najdanovic
Software Engineer, Azalea Maritime
Herceg Novi

Član broj: 1630
Poruke: 133
*.crnagora.net.



Profil

icon Re: LINQ-to-XML i YouTube API feed - pitanje22.05.2008. u 12:31
Što se tiče JOIN-ova i agregacija, predlažem sljedeći Screencast:

- Beth Massi and Amanda Silver on LINQ Syntax in VS2008: http://channel9.msdn.com/Showpost.aspx?postid=335058
(naći ćeš tu i različite "cake" za LINQ, OBAVEZNO štivo)

zatim sljedeće:
- http://channel9.msdn.com/Showpost.aspx?postid=329813
- http://channel9.msdn.com/Showpost.aspx?postid=329815

LINQ i XML
- Avner Aharoni, Beth Massi - XML Properties and Enabling IntelliSense
http://channel9.msdn.com/Showpost.aspx?postid=373954

- Avner Aharoni, Beth Massi - XML Literals Performance and Namespaces Explained
http://channel9.msdn.com/Showpost.aspx?postid=366001


Pogledaj i spisak ostalih video fajlova (ako imaš vremena i interesovanja) sa:
http://channel9.msdn.com/ShowF...mID=38&PageIndex=1&d=0
siguran sam da ćeš takođe naći nešto što te interesuje i

http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx
stranica sa koje sam ti poslao prethodni tutorial.

---

E, sad, još nešto važno pored ovoga gore (ali i ovo gore valja SVAKAKO posjetiti, POGOTOVO prvi link koji sam ti poslao):

- Pokreneš Visual Studio 2008
- Help -> Samples
- Otvori datu lokaciju (vjerovatno će biti: C:\Program Files\Microsoft Visual Studio 9.0\Samples\1033)
- Naći ćeš ZIP fajlove sa primjerima iz najrazličitijih oblasti .NET-a
- Nađi: Language Samples -> LINQ Samples -> SampleQueries -> Sample Queries projekat, otvori i kompajliraj (prepravi string konekcije da ukazuje na tvoj Northwind)
- Pokreni, dobićeš Query Explorer gdje s' lijeve strane imaš kategorije LINQ upita (drvo), s' desne gornje strane imaš primjer kod-a u LINQ-u, a dolje imaš rezultat izvršavanja kod-a.

ODLIČAN skup primjera i OBAVEZNO ga pokreni, kompajliraj, izvuci šortkat (trebaće ti stalno). Čini mi se da u njemu ima nekih 100-tinak LINQ primjera kod-a za svaku oblast i namjenu.
22.05.2008. u 12:31 

deerbeer
Beograd

Član broj: 174418
Poruke: 421
*.adsl-4.sezampro.yu.

Sajt: www.xemico.net


Profil

icon Re: LINQ-to-XML i YouTube API feed - pitanje22.05.2008. u 13:27
Hvala puno na odgovorima i linkovima .
Pogledacu sve interesuje me i sad sam trenutno "idle" pa njuskam malo nove tehnologije .
btw : pa ti si bolja dokumentacija od MSDN-a :)

22.05.2008. u 13:27 

[es] :: .NET :: LINQ-to-XML i YouTube API feed - pitanje

[ Pregleda: 521 | Odgovora: 6 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.