2013-09-30 40 views
1

我正在開發一個應用程序,將電臺流式傳輸到應用程序。廣播電臺名稱和鏈接都存儲在看起來像一個XML文件中的以下內容:在iOS中使用NSXMLParser無法解析XML文件

<radiostacionet> 
<radio> 
<emri>Radio Gurbeti</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://192.184.9.79:8218</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiogurbeti.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>43</min> 
<sec>00</sec> 
</dateandtime> 
<website>http://www.radiogurbeti.com/</website> 
</radio> 
<radio> 
<emri>Radio STAR</emri> 
<frekuenca>96.4 FM</frekuenca> 
<linku>http://radio.1dhe1.com:9400</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiostargjilani.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>42</min> 
<sec>02</sec> 
</dateandtime> 
<website>http://www.radiostargjilan.com/</website> 
</radio> 
<radio> 
<emri>Radio VALA RINORE</emri> 
<frekuenca>94.7 Fm</frekuenca> 
<linku>http://84.22.46.10:8000/</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiovalarinore.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>41</min> 
<sec>07</sec> 
</dateandtime> 
<website>http://www.valarinore.net/</website> 
</radio> 
<radio> 
<emri>Radio Islame</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://server5.digital-webstream.de:33725</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radioislame.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>35</min> 
<sec>13</sec> 
</dateandtime> 
<website>http://www.radiovizioni.net/</website> 
</radio> 
<radio> 
<emri>Radio Vizioni</emri> 
<frekuenca>88.1 FM</frekuenca> 
<linku>http://www.vera-ks.com:9222/</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiovizioni.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>34</min> 
<sec>35</sec> 
</dateandtime> 
<website>http://www.radiovizioni.net/</website> 
</radio> 
<radio> 
<emri>Radio Zëri Mitrovices</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://209.105.250.73:8202/</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiomitrovica.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>33</min> 
<sec>40</sec> 
</dateandtime> 
<website>http://radiomitrovica.eu/</website> 
</radio> 
<radio> 
<emri>Radio Ferizaj</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://87.106.23.138:2012</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radioferiziaj.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>32</min> 
<sec>52</sec> 
</dateandtime> 
<website>http://www.radioferizaji.net/</website> 
</radio> 
<radio> 
<emri>Radio Gjakova</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://82.114.80.202:8000/</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiogjakova.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>31</min> 
<sec>45</sec> 
</dateandtime> 
<website>http://www.radiogjakova.info/</website> 
</radio> 
<radio> 
<emri>Radio Marimanga</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://91.82.85.71:9084/</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiomarimanga.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>30</min> 
<sec>59</sec> 
</dateandtime> 
<website>http://www.radiomarimanga.com/</website> 
</radio> 
<radio> 
<emri>Radio Kosova e Lire</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://www.radiokosovaelire.com/</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiokosovaelire.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>30</min> 
<sec>05</sec> 
</dateandtime> 
<website>http://www.radiokosovaelire.com/</website> 
</radio> 
<radio> 
<emri>Radio Love</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://91.121.23.6:8030</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiolove.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>29</min> 
<sec>34</sec> 
</dateandtime> 
<website>http://dukagjini.com</website> 
</radio> 
<radio> 
<emri>Radio Shqip</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://91.121.23.6:8020</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radioshqip.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>29</min> 
<sec>12</sec> 
</dateandtime> 
<website>http://dukagjini.com</website> 
</radio> 
<radio> 
<emri>Radio HIT</emri> 
<frekuenca>N/A</frekuenca> 
<linku>http://91.121.23.6:8010</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/radiohit.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>13</hour> 
<min>27</min> 
<sec>56</sec> 
</dateandtime> 
<website>http://dukagjini.com</website> 
</radio> 
<radio> 
<emri>Radio Kosova</emri> 
<frekuenca>99.99</frekuenca> 
<linku>http://stream2.rtkit.com:8088</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/3_rating_not_important.png 
</image> 
<dateandtime> 
<day>27</day> 
<month>09</month> 
<year>2013</year> 
<hour>10</hour> 
<min>48</min> 
<sec>34</sec> 
</dateandtime> 
<website>rtklive.com</website> 
</radio> 
<radio> 
<emri>Radio dukagjini</emri> 
<frekuenca>99.6</frekuenca> 
<linku>http://s1.voscast.com:8226</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/3_rating_important.png 
</image> 
<dateandtime> 
<day>26</day> 
<month>09</month> 
<year>2013</year> 
<hour>16</hour> 
<min>52</min> 
<sec>01</sec> 
</dateandtime> 
<website>google.com</website> 
</radio> 
<radio> 
<emri>Radio Bluesky</emri> 
<frekuenca>101.2</frekuenca> 
<linku>http://stream2.rtkit.com:8098</linku> 
<image> 
http://localhost/Apps/An/Shqipcom/data/source/img/radio/cio_feed_logo.png 
</image> 
<dateandtime> 
<day>26</day> 
<month>09</month> 
<year>2013</year> 
<hour>11</hour> 
<min>25</min> 
<sec>22</sec> 
</dateandtime> 
<website>example.com</website> 
</radio> 
</radiostacionet> 

我使用的NSXMLParser解析XML,我想提取文檔的名稱和鏈接(emri和linku) 。

在我RadioViewController.h文件我聲明瞭以下變量:

@interface RadioViewController : UIViewController <NSXMLParserDelegate> 

{ 
    NSMutableArray *_idName; 
    NSMutableArray *_idLink; 
    BOOL isRadio; 
} 

在RadioViewConrtoller.m文件我寫了下面的代碼:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _idName = [[NSMutableArray alloc] init]; 
    _idLink = [[NSMutableArray alloc] init]; 

    NSURL *URL = [NSURL URLWithString:@"my_link"]; 
    NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:URL]; 
    [parser setDelegate:self]; 
    [parser parse]; 
} 

的最後解析器方法:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    if ([elementName isEqualToString:@"radio"]) { 
     isRadio = YES; 
    } 
    else if ([elementName isEqualToString:@"radio"] && isRadio){ 
     NSString *idString = [attributeDict objectForKey:@"emri"]; 
     NSString *isbnString = [attributeDict objectForKey:@"linku"]; 
     [_idName addObject:idString]; 
     [_idLink addObject:isbnString]; 
     NSLog(@"Radio id is: %@ and Link is: %@",idString,isbnString); 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 

    if ([elementName isEqualToString:@"emri"]) { 
     isRadio=NO; 
     NSLog(@"Id Array count is :%d",[_idName count]); 
    } 
} 

沒問題是當我運行應用程序時,我得到以下日誌messa ge: enter image description here

任何幫助將不勝感激,因爲我不明白我在這裏可能會做錯什麼。

非常感謝。

Granit

+0

調試不是火箭科學。有時(如果不是全部的話)它可以挽救你的生命。調試你的代碼,你會看到出了什麼問題。你的'if語句'是錯誤的。沒有機會到達'else'部分 – OutOfBoundsException

回答

3

錯字!

if ([elementName isEqualToString:@"radio"] && isRadio){ 

應該是:

if ([elementName isEqualToString:@"emri"] && isRadio){ 
//         ^^^^ 

而且isRadio確實應該inRadio,更描述。

+0

課程OP:命名是你的朋友!也總是使用常量的名字! –

+0

當我將「radio」更改爲「emri」後,該應用程序崩潰並顯示以下錯誤:2013-09-30 10:45:31.867 ShqipCom [714:c07] ***由於未捕獲的異常'NSInvalidArgumentException',原因:'終止應用程序' *** - [__ NSArrayM insertObject:atIndex:]:object can not be nil' – Granit

+0

@Grangji這是因爲'linku'標籤不會被解析器看到。您需要將該標記的處理移動到它自己的「代碼段」中。 – trojanfoe

0

在你的代碼中,否則,如果在didStartElement方法狀態也不executed.because你已經檢查的元素名稱是無線電在if條件。因此,如果條件包含非無線電元素,那麼你的其他人。所以對象不會添加到數組中。更改代碼像

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    if ([elementName isEqualToString:@"radio"] && isRadio) { 
     NSString *idString = [attributeDict objectForKey:@"emri"]; 
     NSString *isbnString = [attributeDict objectForKey:@"linku"]; 
     [_idName addObject:idString]; 
     [_idLink addObject:isbnString]; 
     NSLog(@"Radio id is: %@ and Link is: %@",idString,isbnString); 

    } 
    else if ([elementName isEqualToString:@"radio"] && !isRadio){ 
     isRadio = YES; 
    } 
} 
相關問題