I've been banging my head on my desk for hours trying to figure out why I can't access the entry.author.name content? I've tried every possible way to access it but failed.
我一直在我的桌子上敲打几个小时试图找出为什么我无法访问entry.author.name内容?我已经尝试了一切可能的方法来访问它但失败了。
But when I loop through all nodes with xml.children I see the author node.
但是当我用xml.children遍历所有节点时,我看到了作者节点。
I see the author node is apart of the atom namespace but it doesn't have a namespace like the other namespaces.
我看到作者节点是原子命名空间的一部分,但它没有像其他命名空间一样的命名空间。
package {
import flash.display.Sprite;
public class Gdata extends Sprite
{
private var xml:XML = <entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"
xmlns:gd="http://schemas.google.com/g/2005" xmlns:yt="http://gdata.youtube.com/schemas/2007">
http://www.w3.org/2005/Atom,http://search.yahoo.com/mrss/,http://schemas.google.com/g/2005, http://gdata.youtube.com/schemas/2007
<id>
http://gdata.youtube.com/feeds/api/videos/bwbZJw-C4Jk
</id>
<published>
2009-04-17T19:11:48.000Z
</published>
<updated>
2009-04-29T10:19:50.000Z
</updated>
<category scheme="http://gdata.youtube.com/schemas/2007/categories.cat" term="News" label="News & Politics"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="Garofalo"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="Olbermann"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="commentary"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="Janeane"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="news"/>
<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="Keith"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="analysis"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="Party"/>
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="Tea"/>
<title type="text">
Janeane Garofalo Calls Tea Party Protesters Racists
</title>
<content type="text">
Janeane Garofalo: http://tinyurl.com/cr6rt8
EPA: http://tinyurl.com/clpyqo
Veterans: http://tinyurl.com/ckbhb6
DHS: http://tinyurl.com/cctf54
DHS2: http://tinyurl.com/dahaxr
John Ziegler: http://tinyurl.com/d7qbo4
Teabagging: http://tinyurl.com/ddskjo
</content>
<link rel="alternate" type="text/html" href="http://www.youtube.com/watch?v=bwbZJw-C4Jk"/>
<link rel="http://gdata.youtube.com/schemas/2007#video.responses" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/bwbZJw-C4Jk/responses"/>
<link rel="http://gdata.youtube.com/schemas/2007#video.related" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/bwbZJw-C4Jk/related"/>
<link rel="http://gdata.youtube.com/schemas/2007#mobile" type="text/html" href="http://m.youtube.com/details?v=bwbZJw-C4Jk"/>
<link rel="self" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/bwbZJw-C4Jk"/>
<author>
<name>
HowTheWorldWorks
</name>
<uri>
http://gdata.youtube.com/feeds/api/users/howtheworldworks
</uri>
</author>
<gd:comments>
<gd:feedLink href="http://gdata.youtube.com/feeds/api/videos/bwbZJw-C4Jk/comments" countHint="2249"/>
</gd:comments>
<media:group>
<media:category label="News & Politics" scheme="http://gdata.youtube.com/schemas/2007/categories.cat">
News
</media:category>
<media:content url="http://www.youtube.com/v/bwbZJw-C4Jk&f=videos&app=youtube_gdata" type="application/x-shockwave-flash" medium="video" isDefault="true" expression="full" duration="236" yt:format="5"/>
<media:content url="rtsp://rtsp2.youtube.com/CiILENy73wIaGQmZ4IIPJ9kGbxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp" type="video/3gpp" medium="video" expression="full" duration="236" yt:format="1"/>
<media:content url="rtsp://rtsp2.youtube.com/CiILENy73wIaGQmZ4IIPJ9kGbxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp" type="video/3gpp" medium="video" expression="full" duration="236" yt:format="6"/>
<media:description type="plain">
Janeane Garofalo: http://tinyurl.com/cr6rt8
</media:description>
<media:keywords>
Janeane, Garofalo, Keith, Olbermann, Tea, Party, commentary, analysis, news
</media:keywords>
<media:player url="http://www.youtube.com/watch?v=bwbZJw-C4Jk"/>
<media:thumbnail url="http://i.ytimg.com/vi/bwbZJw-C4Jk/default.jpg" height="90" width="120" time="00:01:58"/>
<media:thumbnail url="http://i.ytimg.com/vi/bwbZJw-C4Jk/1.jpg" height="90" width="120" time="00:00:59"/>
<media:thumbnail url="http://i.ytimg.com/vi/bwbZJw-C4Jk/3.jpg" height="90" width="120" time="00:02:57"/>
<media:thumbnail url="http://i.ytimg.com/vi/bwbZJw-C4Jk/0.jpg" height="240" width="320" time="00:01:58"/>
<media:title type="plain">
Janeane Garofalo Calls Tea Party Protesters Racists
</media:title>
<yt:duration seconds="236"/>
</media:group>
<gd:rating average="3.9231105" max="5" min="1" numRaters="2289" rel="http://schemas.google.com/g/2005#overall"/>
<yt:statistics favoriteCount="304" viewCount="33463"/>
</entry>;
namespace atom = "http://www.w3.org/2005/Atom"
namespace media ="http://search.yahoo.com/mrss/";
namespace gd = "http://schemas.google.com/g/2005";
namespace yt = "http://gdata.youtube.com/schemas/2007";
public function Gdata()
{
var atom:Namespace = new Namespace();
trace("0",xml.children()[22]);
trace("1",xml.inScopeNamespaces());
trace("2",xml..media::group);
trace("3",xml..yt::statistics.@favoriteCount);
trace("4",xml..yt::duration.@seconds);
trace("5",xml..author ); // why?????????
trace("6",xml.author ); // why?????????
var x:int = 0;
for each (var i in xml.children())
{
if(i.localName() == 'author')
{
trace("author", i);
}
}
}
}
}
3 个解决方案
#1
Try this ...
试试这个 ...
public function Gdata()
{
var atom:Namespace = new Namespace("http://www.w3.org/2005/Atom");
var media:Namespace = new Namespace("http://search.yahoo.com/mrss/");
var gd:Namespace = new Namespace("http://schemas.google.com/g/2005");
var yt:Namespace = new Namespace("http://gdata.youtube.com/schemas/2007");
default xml namespace = atom; // IMPORTANT
trace("0",xml.children()[22]);
trace("1",xml.inScopeNamespaces());
trace("2",xml..media::group);
trace("3",xml..yt::statistics.@favoriteCount);
trace("4",xml..yt::duration.@seconds);
trace("5",xml..author ); // why?????????
trace("6",xml.author ); // why?????????
var x:int = 0;
for each (var i in xml.children())
{
if(i.localName() == 'author')
{
trace("author", i);
}
}
}
#2
you can also just strip out the namespace completely... here's the best solution I found (it simply turns the namespace details into attributes):
您也可以完全删除命名空间...这是我找到的最佳解决方案(它只是将命名空间详细信息转换为属性):
public function removeNS(data:XML):XML {
var myXML;
try {
var modified:String = data.toString().replace("xmlns=", "xmlns:default=");
var pattern:RegExp = new RegExp(":(?!/)", "gi");
var transmuted:String = modified.replace(pattern, "_");
myXML = new XML(transmuted);
} catch (e:Error) {
myXML = data;
}
return myXML;
}
#3
Somewhere in your mxml file you need the following code snippet (before you work with your XML Document)
在mxml文件中的某处,您需要以下代码段(在使用XML文档之前)
<mx:Script>
<![CDATA[
private namespace atom = "http://www.w3.org/2005/Atom";
use namespace atom; // This is the important line right here!!!!
]]>
</mx:Script>
#1
Try this ...
试试这个 ...
public function Gdata()
{
var atom:Namespace = new Namespace("http://www.w3.org/2005/Atom");
var media:Namespace = new Namespace("http://search.yahoo.com/mrss/");
var gd:Namespace = new Namespace("http://schemas.google.com/g/2005");
var yt:Namespace = new Namespace("http://gdata.youtube.com/schemas/2007");
default xml namespace = atom; // IMPORTANT
trace("0",xml.children()[22]);
trace("1",xml.inScopeNamespaces());
trace("2",xml..media::group);
trace("3",xml..yt::statistics.@favoriteCount);
trace("4",xml..yt::duration.@seconds);
trace("5",xml..author ); // why?????????
trace("6",xml.author ); // why?????????
var x:int = 0;
for each (var i in xml.children())
{
if(i.localName() == 'author')
{
trace("author", i);
}
}
}
#2
you can also just strip out the namespace completely... here's the best solution I found (it simply turns the namespace details into attributes):
您也可以完全删除命名空间...这是我找到的最佳解决方案(它只是将命名空间详细信息转换为属性):
public function removeNS(data:XML):XML {
var myXML;
try {
var modified:String = data.toString().replace("xmlns=", "xmlns:default=");
var pattern:RegExp = new RegExp(":(?!/)", "gi");
var transmuted:String = modified.replace(pattern, "_");
myXML = new XML(transmuted);
} catch (e:Error) {
myXML = data;
}
return myXML;
}
#3
Somewhere in your mxml file you need the following code snippet (before you work with your XML Document)
在mxml文件中的某处,您需要以下代码段(在使用XML文档之前)
<mx:Script>
<![CDATA[
private namespace atom = "http://www.w3.org/2005/Atom";
use namespace atom; // This is the important line right here!!!!
]]>
</mx:Script>