2012-02-28 9 views
0

誰も私にこのノードが見つからない理由を教えてもらえますか?C#でDomDocumentを使ってTwitterを解析する

WebClient Client = new WebClient();  
    Stream stream = 
    Client.OpenRead("http://search.twitter.com/search.atom?q=JetBlueCheeps"); 

    StreamReader reader = new StreamReader(stream); 
    XmlDocument doc = new XmlDocument(); 
    XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable); 

    mgr.AddNamespace("google", "http://base.google.com/ns/1.0"); 
    mgr.AddNamespace("openSearch", "http://a9.com/-/spec/opensearch/1.1/"); 
    mgr.AddNamespace("", "http://www.w3.org/2005/Atom"); 
    mgr.AddNamespace("twitter", "http://api.twitter.com/"); 
    mgr.AddNamespace("georss", "http://www.georss.org/georss"); 

    doc.LoadXml(reader.ReadToEnd()); 
    XmlNodeList list = doc.DocumentElement.SelectNodes("entry", mgr); 

私はすべての「エントリー」ノードを読み込むしようとしていますが、この代替方法が動作しているため、彼らは、文書中に存在している:

XmlNode fentry = doc.DocumentElement.ChildNodes[9]; 
    while (fentry.NextSibling != null) 
      fentry = fentry.NextSibling; 

ありがとう!

答えて

2

あなたが選択したいノードへのXPathを期待しています。試してみてください:

XmlNodeList list = doc.DocumentElement.SelectNodes("feed/entry", mgr);

または

XmlNodeList list = doc.DocumentElement.SelectNodes("//entry", mgr);

あなたは関係なく、文書の階層で、彼らがどこにいるのすべてfeedノードをマッチさせたい場合。

+0

これらのXPathを他の多くのユーザーと一緒に試してみました。しかし、チップをありがとう。 – BrianO

+0

デフォルトの名前空間をオーバーライドします。 System.Xmlはmgr.AddNamespace( ""、 "http://www.w3.org/2005/Atom")を好きではありませんでした。だから私は空の文字列があるところに私自身の名前をつけて、もちろん上記のBhargavによって提案されたXPathのバリエーションを実験しました。皆さんありがとう! @BhargavBhat – BrianO

関連する問題