【问题标题】:Need help parsing a twitter xml document into variables in VB.NET?需要帮助将 twitter xml 文档解析为 VB.NET 中的变量吗?
【发布时间】:2011-05-04 04:29:00
【问题描述】:

好的,所以我花了一天左右的时间试图让这个工作。我需要从 twitter 中解析一个 xml 文档,选择某些节点并将值放入变量中。我收到一个错误...从字符串“user/screen_name”到类型“Integer”的转换无效。解析 XML 超出了我的范围。任何帮助将不胜感激......这是我到目前为止所拥有的。

首先是 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

现在唯一可以简单解决的问题是转推无法正确显示,因为节点不同,所以我只需添加一个 If then 来查看它是否是转推,然后相应地调整节点。再次感谢。

【问题讨论】:

  • 好吧,没问题,我回答了我自己的问题,因为它现在可以正常工作了,只是发布了我找到的解决方案作为答案,这样其他人就可以看到我是如何修复它的,这不是更多细节或另一个问题,而是答案解决了我的问题
  • 现在,如果您想发布问题的答案,那就不同了。随意添加。但是,如果您需要使用更多详细信息更新您的问题,请在以后进行编辑。谢谢。

标签: xml vb.net parsing twitter


【解决方案1】:

您说明的解决方案不是一个好的解决方案,因为如果节点的顺序发生变化,您的代码将会中断。您所说明的技术被称为“幻数”。使用 XPath 解析 xml 对象的更好方法。这样,节点的顺序就无关紧要了。

【讨论】:

    【解决方案2】:

    我想你会需要

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

    以及用于检索其他元素的类似内容。

    【讨论】:

    • 非常感谢 Bala,使用这种方法仍然无法正常工作……但它确实让我更近了一步……非常需要信息。再次感谢。我将使用我使用的代码发布答案。
    【解决方案3】:

    试试:

    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 假定您设置或获取的项目有子项。 Value 只获取项目的值,没有假定子项,并且正如 BalaR 所说,按名称引用项目,因此如果 twitter API 更新您的索引指针将被重新计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多