2011-05-04 38 views
0

好吧,我花了一天左右的時間試圖讓這個工作。我需要解析一個來自twitter的XML文檔,選擇特定的節點並將值放入變量中。我得到一個錯誤...從字符串「用戶/屏幕名稱」轉換爲鍵入「整數」無效。解析XML不在我的聯盟中。任何幫助將不勝感激...這是我迄今爲止。需要幫助解析一個twitter xml文檔到VB.NET中的變量?

首先Twitter的XML文件...

<?xml version="1.0" encoding="UTF-8"?> 
<statuses type="array"> 
<status> 
<created_at>Sat Apr 30 04:10:46 +0000 2011</created_at> 
<id>64179865481510912</id> 
<text>@sixrevisions implementing the Twitter API for my new portfolio site!</text> 
<source><a href="http://twitter.com/#!/download/iphone" rel="nofollow">Twitter for iPhone</a></source> 
<truncated>false</truncated> 
<favorited>false</favorited> 
<in_reply_to_status_id>64087873804189696</in_reply_to_status_id> 
<in_reply_to_user_id>14444403</in_reply_to_user_id> 
<in_reply_to_screen_name>sixrevisions</in_reply_to_screen_name> 
<retweet_count>0</retweet_count> 
<retweeted>false</retweeted> 
<user> 
    <id>92868468</id> 
    <name>Timothy Antonucci</name> 
    <screen_name>TimAtWerked</screen_name> 
    <location>Boston, MA</location> 
    <description>My name is Tim a web designer/developer in Boston, I love cars and photography ;-)</description> 
    <profile_image_url>http://a2.twimg.com/profile_images/1336500668/wrkdtwitico_normal.gif</profile_image_url> 
    <url>http://www.werked.com</url> 
    <protected>false</protected> 
    <followers_count>14</followers_count> 
    <profile_background_color>b2c789</profile_background_color> 
    <profile_text_color>333333</profile_text_color> 
    <profile_link_color>0084B4</profile_link_color> 
    <profile_sidebar_fill_color>b3d6af</profile_sidebar_fill_color> 
    <profile_sidebar_border_color>6e996a</profile_sidebar_border_color> 
    <friends_count>34</friends_count> 
    <created_at>Fri Nov 27 00:35:31 +0000 2009</created_at> 
    <favourites_count>0</favourites_count> 
    <utc_offset>-18000</utc_offset> 
    <time_zone>Eastern Time (US & Canada)</time_zone> 
     <profile_background_image_url>http://a3.twimg.com/profile_background_images/97017170/1440x900sm.jpg</profile_background_image_url> 
    <profile_background_tile>true</profile_background_tile> 
    <profile_use_background_image>true</profile_use_background_image> 
    <notifications /> 
    <geo_enabled>false</geo_enabled> 
    <verified>false</verified> 
    <following /> 
    <statuses_count>39</statuses_count> 
    <lang>en</lang> 
    <contributors_enabled>false</contributors_enabled> 
    <follow_request_sent /> 
    <listed_count>0</listed_count> 
    <show_all_inline_media>false</show_all_inline_media> 
    <default_profile>false</default_profile> 
    <default_profile_image>false</default_profile_image> 
    <is_translator>false</is_translator> 
</user> 
<geo /> 
<coordinates /> 
<place /> 
<contributors /> 
</status> 
</statuses> 

下一頁我的代碼......

Dim m_xmld As XmlDocument 
Dim m_nodelist As XmlNodeList 
Dim m_node As XmlNode 
m_xmld = New XmlDocument() 
m_xmld.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=timatwerked&count=4&include_rts=true") 
m_nodelist = m_xmld.SelectNodes("/statuses/status") 
For Each m_node In m_nodelist 
    Dim twitName = m_node.ChildNodes.Item("screen_name").InnerText 
    Dim twitrName = m_node.ChildNodes.Item("name").InnerText 
    Dim twitText = m_node.ChildNodes.Item("text").InnerText 
    Dim twitPic = m_node.ChildNodes.Item("profile_image_url").InnerText 
    Dim twitTime = m_node.ChildNodes.Item("created_at").InnerText 
    twitPic = twitPic.Replace("normal", "mini") 
    twitProLink = "http://www.twitter.com/" & twitName 
    'Do Stuff with variables 
Next 

行,所以我應該更加重視對錯誤和Visual Studio。 Item以整數形式檢索給定索引處的節點。我正在搜索字符串名稱,所以我只是從0開始計算項目,並使用該項目尋找的數字...請參閱下面的代碼。

Dim m_xmld As XmlDocument 
Dim m_nodelist As XmlNodeList 
Dim m_node As XmlNode 
m_xmld = New XmlDocument() 
m_xmld.Load("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=timatwerked&count=4&include_rts=true") 
m_nodelist = m_xmld.SelectNodes("/statuses/status") 
For Each m_node In m_nodelist 
    Dim twitName = m_node.ChildNodes.Item(11).ChildNodes.Item(2).InnerText 
    Dim twitrName = m_node.ChildNodes.Item(11).ChildNodes.Item(1).InnerText 
    Dim twitText = m_node.ChildNodes.Item(2).InnerText 
    Dim twitPic = m_node.ChildNodes.Item(11).ChildNodes.Item(5).InnerText 
    Dim twitTime = m_node.ChildNodes.Item(0).InnerText 
    twitPic = twitPic.Replace("normal", "mini") 
    twitProLink = "http://www.twitter.com/" & twitName 
    'Do stuff with variables 
    Next 

現在,這將是一個簡單的解決的唯一問題是轉推顯示不正確,因爲節點都是不同的,所以我就加入。如果然後看看是不是那麼轉推調整節點因此。再次感謝。

+0

好吧沒有問題的想法我回答了我自己的問題,因爲它的工作現在只是發佈瞭解決方案,我發現作爲答案,以便其他人可以看到我如何解決它,它不是更多的細節或另一個問題,它是解決我的問題的答案 – 2011-05-05 13:16:47

+0

現在,如果你想發佈你的問題的答案,那就不一樣了。隨意補充一點。但是,如果您需要更詳細地更新您的問題,請在將來編輯。謝謝。 – Will 2011-05-05 13:22:12

回答

0

我認爲你需要

Dim twitName = m_node.ChildNodes.Item("user").ChildNodes.Item("screen_name").InnerText 

和類似的東西用於檢索其他元素。

+0

非常感謝Bala,它仍然沒有使用這種方法...但它確實讓我更靠近了一步......更需要信息。再次感謝。我會用我使用的代碼發佈答案。 – 2011-05-04 13:38:40

1

你出的解決方案是不是一個很好的解決方案,因爲你的代碼將打破,如果節點的順序都沒有改變。你所說明的技術被稱爲「幻數」。使用XPath解析xml對象的更好方法。這樣,節點的順序就無關緊要了。

0

嘗試:

For Each m_node In m_nodelist Dim twitName = m_node.ChildNodes.Item("user").ChildNodes.Item("screen_name").Value 'OtherNodes 'Do stuff with variables Next

的innerText假定您設置或獲取項目有子。值只抓取沒有孩子假定的物品的價值,而BalaR Stated則是通過名稱引用物品,所以如果twitter API更新你的索引指針將被重新計算。