多属性xml过滤器as3 e4x

时间:2010-04-22 15:57:16

标签: xml actionscript-3 filtering e4x

我正在努力想出最好的xml架构来支持标签过滤。然后是一个在一系列标签上过滤xml的方法。所以这是xml:

var videoXML:XML=
<?xml version="1.0" encoding="UTF-8"?>
    <videos>
        <video> <tags label="dogs,brown,lawns" /> </video>
        <video> <tags label="dogs,cats" /> </video>
        <video> <tags label="cats,lawns" /> </video>
    </videos>

我现在过滤的方式是:

var filteredList:XMLList = videoXML..video.tags.(@label.indexOf("lawns") != -1 && @label.indexOf("dogs") != -1);

只返回带有“草坪”和“狗”标签的视频,这一切都很好。

但我想要一个方法,我可以传入尽可能多的标签,并获得该过滤器的结果。

类似的东西:

function getFilteredByTags(...tags):XMLList{

}

关于如何实现这一目标的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:0)

我无法想出一个更好的方法,但是你的函数可以计算出有多少标签,然后在该计数上运行一个switch语句,并为标签数量做正确的e4x。

答案 1 :(得分:0)

未经测试,但应该工作。™

将您的XML更改为:

var videoXML:XML=
<?xml version="1.0" encoding="UTF-8"?>
<videos>
    <video>
        <tag label="dogs" />
        <tag label="brown" />
        <tag label="lawns" />
    </video>
    <video>
        <tag label="dogs" />
        <tag label="cats" />
    </video>
    <video>
        <tag label="cats" />
        <tag label="lawns" />
    </video>
</videos>

返回包含多个标签的视频的功能:

function getFilteredByTags(...tags):XMLList
{
    // Start with a list of all videos
    var foundVideos:XMLList = videoXML.video;

    for each (tag in tags)
    {
        // Filter foundVideos down to those videos that match tag
        foundVideos = foundVideos.(tag.@label == tag);
    }

    return foundVideos;
}