Jquery无法解析XML

时间:2010-07-22 21:26:57

标签: jquery air xml-parsing

我在AIR应用中解析youtube视频Feed。 使用jquery来解析它。

    $(feed).find("entry").each(function()
    {
      var tit = $(this).find('title');
      alert(tit.text());
    }

似乎在解析category(类别标签以不同的方式关闭)之后,它无法解析文档的其余部分。上面的代码成功警告文本直到updated标记。什么是解决方案

 <entry gd:etag='W/&quot;C0AMRn47eCp7ImA9WxRQGUw.&quot;'>
        <id>tag:youtube,2008:video:ZTUVgYoeN_b</id>
        <published>2008-07-05T19:56:35.000-07:00</published>
        <updated>2008-07-18T07:21:59.000-07:00</updated>
        <category scheme='http://schemas.google.com/g/2005#kind'
          term='http://gdata.youtube.com/schemas/2007#video'/>
        <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat'
          term='Shopping'/>
        <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat'
          term='parkas'/>
        <category scheme='http://gdata.youtube.com/schemas/2007/categories.cat'
          term='People' label='People'/>
        <title>Shopping for Coats</title>
        <content type='application/x-shockwave-flash'
          src='http://www.youtube.com/v/ZTUVgYoeN_b?f=gdata_standard...'/>
        <link rel='alternate' type='text/html'
          href='http://www.youtube.com/watch?v=ZTUVgYoeN_b'/>
        <link rel='http://gdata.youtube.com/schemas/2007#video.responses'
          type='application/atom+xml'
          href='http://gdata.youtube.com/feeds/api/videos/ZTUVgYoeN_b/responses?v=2'/>
        <link rel='http://gdata.youtube.com/schemas/2007#video.ratings'
          type='application/atom+xml'
          href='http://gdata.youtube.com/feeds/api/videos/ZTUVgYoeN_b/ratings?v=2'/>
        <link rel='http://gdata.youtube.com/schemas/2007#video.complaints'
          type='application/atom+xml'
          href='http://gdata.youtube.com/feeds/api/videos/ZTUVgYoeN_b/complaints?v=2'/>
        <link rel='http://gdata.youtube.com/schemas/2007#video.related'
          type='application/atom+xml'
          href='http://gdata.youtube.com/feeds/api/videos/ZTUVgYoeN_b/related?v=2'/>
        <link rel='http://gdata.youtube.com/schemas/2007#mobile'
          type='text/html' href='http://m.youtube.com/details?v=ZTUVgYoeN_b'/>
        <link rel='self' type='application/atom+xml'
          href='http://gdata.youtube.com/feeds/api/standardfeeds/top_rated/v/ZTUVgYoeN_b?v=2'/>
        <author>
          <name>andyland74</name>
          <uri>http://gdata.youtube.com/feeds/api/users/andyland74</uri>
        </author>
        <media:group>
          <media:title type='plain'>Shopping for Coats</media:title>
          <media:description type='plain'>
            What could make for more exciting video?
          </media:description>
          <media:keywords>Shopping, parkas</media:keywords>
          <yt:duration seconds='79'/>
          <yt:videoid>ZTUVgYoeN_b</yt:videoid>
          <media:player url='http://www.youtube.com/watch?v=ZTUVgYoeN_b'/>
          <media:credit role='uploader' scheme='urn:youtube'>andyland74</media:credit>
          <media:category label='People'
            scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>People
          </media:category>
          <media:content 
            url='http://www.youtube.com/v/ZTUVgYoeN_b?f=gdata_standard...'
            type='application/x-shockwave-flash' medium='video'
            isDefault='true' expression='full' duration='215' yt:format='5'/>
          <media:content
            url='rtsp://rtsp2.youtube.com/ChoLENy73bIAEQ1kgGDA==/0/0/0/video.3gp'
            type='video/3gpp' medium='video'
            expression='full' duration='215' yt:format='1'/>
          <media:content
            url='rtsp://rtsp2.youtube.com/ChoLENy73bIDRQ1kgGDA==/0/0/0/video.3gp'
            type='video/3gpp' medium='video'
            expression='full' duration='215' yt:format='6'/>
          <media:thumbnail url='http://img.youtube.com/vi/ZTUVgYoeN_b/2.jpg'
            height='97' width='130' time='00:00:03.500'/>
          <media:thumbnail url='http://img.youtube.com/vi/ZTUVgYoeN_b/1.jpg'
            height='97' width='130' time='00:00:01.750'/>
          <media:thumbnail url='http://img.youtube.com/vi/ZTUVgYoeN_b/3.jpg'
            height='97' width='130' time='00:00:05.250'/>
          <media:thumbnail url='http://img.youtube.com/vi/ZTUVgYoeN_b/0.jpg'
            height='240' width='320' time='00:00:03.500'/>
        </media:group>
        <yt:statistics viewCount='383290' favoriteCount='7022'/>
        <gd:rating min='1' max='5' numRaters='14763' average='4.93'/>
        <georss:where>
          <gml:Point>
            <gml:pos>21.37124437061831 -157.87353515625</gml:pos>
          </gml:Point>
        </georss:where>
        <gd:comments>
          <gd:feedLink href='http://gdata.youtube.com/feeds/api/videos/ZTUVgYoeN_b/comments'
            countHint='9416'/>
        </gd:comments>
      </entry>

1 个答案:

答案 0 :(得分:1)

你对类别标签是正确的......做了一些奇怪的事情,我注意到这一点,当我复制并粘贴google的youtube xml代码时注册为文本,因为它在<pre style="word-wrap: break-word; white-space: pre-wrap;">[XML HERE]</pre>内部进入XML解析器;它也很难阅读类别标签,这些标签似乎是不正确关闭的(即使它们是)。我有一种感觉,要修复xml,正斜杠和大于符号之间的空格是必要的,即

<category scheme='[scheme_url]' term='[term_name]' />

而不是他们拥有的东西:

<category scheme='[scheme_url]' term='[term_name]'/>

但我想这并不能帮助您解决问题,除非您愿意先修复XML。但是,我已经使用jQuery成功解析相同的feed。它可能是您的初始$.get代码,如果您还没有使用$.getJSON,请尝试使用{如果您仍需要帮助,请查看代码的其余部分。

否则,这是我一直在使用的,它确实有效(据我所知)。我在一个网站而不是Adobe AIR中使用它,但如果你在AIR中使用jQuery,jQuery就是jQuery,它应该无关紧要(这是关于jQuery,imho的最好的部分)。这是我的代码:

$.getJSON("http://gdata.youtube.com/feeds/api/users/[insert_userName_here]/uploads?orderby=published&start-index=1&max-results=50&v=2&alt=json-in-script&callback=?",
function(json){
    $.each(json.feed.entry,function(j,entry) {
        //Note: I wouldn't use an alert if you're reading from a big feed, as max-results is set to 50...
        alert(entry.title.$t);
    });
});

上面的代码会读取包含所有上传视频的任何一个用户的Feed。希望这有帮助!