iPhone NSXMLParse для файлов .asx - PullRequest
1 голос
/ 16 мая 2011

Я совершенно новичок в XML .

У кого-нибудь есть пример кода, который поможет мне создать собственный класс, который будет анализировать файлы Microsoft .asx ввоспроизводить mms-потоки по порядку на iPhone?

Некоторые из Google показали мне, что .xml и .asx несколько связаны, хотя второй очень ограничен по сравнению с первым.

IМне нужно воспроизвести три потока последовательно, внутри контейнера .asx , например:

<asx version="3.0">
<TITLE>MYSONGS</TITLE>
<entry>
<TITLE>www.mysite.com</TITLE>
<ref href="mms://mysite.com/musicFolder/song1.wma" />
</entry>
<entry>
<TITLE>MYSONGS</TITLE>
<ref href="mms://mysite.com/musicFolder/song2.wma" />
</entry>
<entry>
<TITLE>www.mysite.com</TITLE>
<ref href="mms://mysite.com/musicFolder/song3.wma" />
</entry>
</asx>

Я уже могу анализировать поток mms, декодировать и воспроизводить файл wma.Я просто пока не могу проанализировать содержимое .asx , чтобы воспроизводить потоки в последовательности.Спасибо!

1 Ответ

0 голосов
/ 10 ноября 2011

В моем случае я смог успешно проанализировать файлы .asx, используя TouchXML , используя этот код (который я изменил по сравнению с исходной версией, доступной на http://foobarpig.com/iphone/parsing-xml-element-attributes-with-touchxml.html):

         //  we will put parsed data in an a array
        NSMutableArray *res = [[NSMutableArray alloc] init];
        NSURL *url = [NSURL URLWithString: @"http://www.yoursite.com/WindowsMediaDotCom/theFileToParse.asx"];

        /* have TouchXML parse it into a CXMLDocument */
        CXMLDocument *document = [[[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil] autorelease];

        NSArray *nodes = NULL;
        //  searching for piglet nodes
        nodes = [document nodesForXPath:@"//ref" error:nil];

        for (CXMLElement *node in nodes) {
            NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
            int counter;
            for(counter = 0; counter < [node childCount]; counter++) {
                //  common procedure: dictionary with keys/values from XML node
                [item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]];
            }

            //  and here it is - attributeForName! Simple as that.
            [item setObject:[[node attributeForName:@"href"] stringValue] forKey:@"href"];  // <------ this magical arrow is pointing to the area of interest

            [res addObject:item];
            [item release];
        }

        //   and we print our results
        NSLog(@"%@", res); 
...