【问题标题】:Why can't I access xml nodes with out namespaces?为什么我不能访问没有命名空间的 xml 节点?
【发布时间】:2017-05-06 22:52:55
【问题描述】:

我已经在办公桌上敲了好几个小时,试图弄清楚为什么我无法访问 entry.author.name 内容?我已经尝试了所有可能的方法来访问它,但失败了。

但是当我使用 xml.children 遍历所有节点时,我看到了作者节点。

我看到作者节点是 atom 命名空间的一部分,但它没有像其他命名空间那样的命名空间。

包裹 { 导入 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); } } } }

}

【问题讨论】:

    标签: actionscript-3 youtube gdata-api e4x atom-feed


    【解决方案1】:

    试试这个...

    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);
            }
        }
    }
    

    【讨论】:

    • default xml namespace = atom 成功了!谢谢
    【解决方案2】:

    你也可以完全去掉命名空间...这是我找到的最好的解决方案(它只是将命名空间细节变成属性):

    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】:

      在您的 mxml 文件中的某处,您需要以下代码 sn-p(在您使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        • 2011-10-26
        • 2019-01-29
        • 2012-06-05
        • 1970-01-01
        • 2020-05-13
        • 1970-01-01
        相关资源
        最近更新 更多