XML-фильтр с несколькими атрибутами as3 e4x - PullRequest
0 голосов
/ 22 апреля 2010

Я пытаюсь найти лучшую 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 голосов
/ 11 сентября 2010

Не проверено, но должно работать. ™

Измените свой 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;
}
0 голосов
/ 23 апреля 2010

Я не могу придумать лучшего способа, но ваша функция могла бы подсчитать, сколько есть тегов, затем запустить оператор switch для этого счетчика и сделать правильный e4x для количества тегов.

...