2010-05-19 68 views
1

我的XML看起来像这样:e4x过滤多个孩子?

<?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)) 

刚刚返回的所有项目:(

回答

0

这里有一个更好的方法,而无需使用任何自定义功能:

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

contains接受一个值来检查用于XML或XMLList对象


你可以使用一个额外的功能做处理:

// 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 
+0

真棒thx :)工程很好,但希望e4x有一些本机支持这种查询。 – Chris 2010-05-20 03:03:53

+0

不客气。没有使用任何功能有更好的方法..更新了答案。 – Anurag 2010-05-20 20:48:43

0

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

现在,如果我在actionScript中这样做,这是我所有的e4x知识来自我会做这projects.project.containing.(id==3).parent()我不知道如果JS支持该父方法或可能它有它自己的。