代码之家  ›  专栏  ›  技术社区  ›  matt lohkamp

找出AS3的XMLList是否包含作为节点值的字符串

  •  2
  • matt lohkamp  · 技术社区  · 15 年前

    是否有与Array.indexOf等效的XMLList?

    例如-

    var array:Array = ['one','two'];
    trace(array.indexOf('two')); // returns 1, since it's at the second position
    trace(array.indexOf('three')); // returns -1, since it isn't found
    

    ... 正确的?但如果我有这个呢-

    var xml:XML = <list><item>one</item><item>two</item><list>
    var xmlList:XMLList = list.item;
    

    xmlList.indexOfChildByNodeValue('two'); // returns 1, because it's the second child
    xmlList.indexOfChildByNodeValue('three'); // returns -1, because it doesn't match any children
    

    有道理?

    2 回复  |  直到 15 年前
        1
  •  5
  •   cynicaljoy    15 年前

    我制作了一个演示,演示了如何在没有循环的情况下完成它。尽管这需要更多的前期工作。不过,如果你要经常检查值的话,这是值得的。

    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
                   xmlns:s="library://ns.adobe.com/flex/spark" 
                   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="_init();">
        <fx:Declarations>
            <fx:XML id="movieList" source="http://www.movies.com/rss-feeds/jen-yamato-reviews-rss" />
        </fx:Declarations>
        <fx:Script>
            <![CDATA[
                import mx.logging.ILogger;
                import mx.logging.Log;
                import mx.logging.LogEventLevel;
                import mx.logging.targets.TraceTarget;
    
                public static const MOVIE_TITLE:String = "Inception";
    
                private var _logger:ILogger = Log.getLogger("Sandbox");
    
                private function _init() :void
                {
                    var traceTarget:TraceTarget = new TraceTarget();
                    traceTarget.level = LogEventLevel.ALL;
                    Log.addTarget(traceTarget);
    
                    var xmlList:XMLList = movieList..item;
    
                    var firstItem:XML = movieList..item[0];
                    var firstItemIndex:int = firstItem.childIndex();
                    _logger.info("First Item Index: " + firstItemIndex);
    
                    var item:XML = xmlList.(title == MOVIE_TITLE)[0];
                    _logger.info("Contains: " + xmlList.contains(item) + " // " + item.childIndex());
    
                    var actualIndex:int = (item.childIndex() - firstItemIndex);
                    _logger.info("Actual Index: " + actualIndex);
    
                    _logger.info("Result: " + xmlList[actualIndex]);
                }
            ]]>
        </fx:Script>
    
    </s:Application>
    

    item 然后从 childIndex() 使用E4X搜索的匹配结果。

        2
  •  1
  •   sberry    15 年前

    contains() 虽然这只会帮助你的情况下,如果你真的只想知道 indexOf() == || != -1 .