0

我正在尝试提出最好的 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{

}

关于如何做到这一点的任何想法?

谢谢!

4

2 回答 2

0

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

于 2010-04-23T16:04:01.757 回答
0

未经测试,但应该可以工作。™</p>

将您的 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;
}
于 2010-09-11T07:56:32.180 回答