代码之家  ›  专栏  ›  技术社区  ›  Chris

E4X过滤器对多个孩子?

  •  1
  • Chris  · 技术社区  · 14 年前

    我的XML如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
    <projects>
        <project 
            id="1"
            thumb="media/images/thumb.jpg"
            >
            <categories>
                <id>1</id>
                <id>2</id>
            </categories>
            <director>Director name</director>
            <name><![CDATA[IPhone commercial]]></name>
            <url><![CDATA[http://www.iphone.com]]></url>
            <description><![CDATA[Description about the project]]></description>
            <thumb><![CDATA[/upload/images/thumb.jpg]]></thumb>
        </project>
    </projects>
    

    但是我不知道如何根据类别ID筛选项目?有人知道怎么做吗?:)

    类似:

    projects.project.(categories.(id == 3))
    

    只返回所有项目:(

    2 回复  |  直到 14 年前
        1
  •  0
  •   Anurag    14 年前

    以下是不使用任何自定义函数的更好方法:

    projects.project.(categories.id.contains(1))
    

    contains 在XML或XML列表对象中检查单个值。


    您可以使用一个额外的函数来进行处理:

    // check if any of the <id> nodes matches any of the given values
    function containing(nodes, values) {
        for each(var id in nodes) {
            if(values.indexOf(parseInt(id)) !== -1) return true;
        }
        return false;
    }
    
    projects.project.(containing(categories.id, [1])); // matches the first project
    projects.project.(containing(categories.id, [46])); // matches nothing
    
        2
  •  0
  •   invertedSpear    14 年前

    应该是 projects.project..(id==3) 双点跳过任何节点,但如果ID更多,这是一个问题。

    现在,如果我在actionscript中这样做的话,我所有的e4x知识都来自于这个脚本。 projects.project.containing.(id==3).parent() 我不确定JS是否支持这个父方法,或者它是否有自己的父方法。