2012-08-05 91 views
1

我已經打了幾天我的腦袋進入牆壁,現在試圖弄清楚如何解析可可和客觀C中的這個xml文檔。我已經將它加載到NSXMLDocument中,並已能夠獲得節點。從NSXMLDocument節點獲取屬性信息

<MediaContainer noHistory="0" replaceParent="0" size="4" identifier="com.plexapp.system"> 
<Directory key="aHR0cDovLzE5Mi4xNjguMS45OTozMjQwMC9saWJyYXJ5L3NlY3Rpb25zLzI_" art="2/art?updatedAt=1344035442" unique="1" name="3D Movies" title="3D Movies" type="movie" serverVersion="0.9.6.7.204-266f05d" host="192.168.1.99" serverName="Eddard" path="/library/sections/2" machineIdentifier="2dddaaedb46a722cf74695c19a7d3947bbeebfd2" local="1" port="32400"/> 
<Directory key="aHR0cDovLzE5Mi4xNjguMS45OTozMjQwMC9saWJyYXJ5L3NlY3Rpb25zLzE_" art="1/art?updatedAt=1344035443" unique="1" name="Movies" title="Movies" type="movie" serverVersion="0.9.6.7.204-266f05d" host="192.168.1.99" serverName="Eddard" path="/library/sections/1" machineIdentifier="2dddaaedb46a722cf74695c19a7d3947bbeebfd2" local="1" port="32400"/> 
<Directory key="aHR0cDovLzE5Mi4xNjguMS45OTozMjQwMC9saWJyYXJ5L3NlY3Rpb25zLzQ_" art="4/art?updatedAt=1344035444" unique="1" name="Super Audio CDs" title="Super Audio CDs" type="movie" serverVersion="0.9.6.7.204-266f05d" host="192.168.1.99" serverName="Eddard" path="/library/sections/4" machineIdentifier="2dddaaedb46a722cf74695c19a7d3947bbeebfd2" local="1" port="32400"/> 
<Directory key="aHR0cDovLzE5Mi4xNjguMS45OTozMjQwMC9saWJyYXJ5L3NlY3Rpb25zLzM_" art="3/art?updatedAt=1344037454" unique="1" name="TV Shows" title="TV Shows" type="show" serverVersion="0.9.6.7.204-266f05d" host="192.168.1.99" serverName="Eddard" path="/library/sections/3" machineIdentifier="2dddaaedb46a722cf74695c19a7d3947bbeebfd2" local="1" port="32400"/> 
</MediaContainer> 

是什麼讓XML文檔變得棘手是每個節點都有幾個屬性。所以當我走[節點XMLString]時,我找回完整的字符串,但仍然沒有意義。他們是從節點中拉出單個屬性的一種方法,例如類似於java XML方法的稱爲getAttribute(String)的方法,它允許我爲字符串參數放入屬性名稱並返回綁定的值,用於示例getAttribute(「大小」)將返回值爲4的字符串。

任何幫助將不勝感激。

回答

0

如果您正在使用的NSXMLParser你可以使用下面的NSXMLParserDelegate方法來獲取XML元素的屬性:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 
    if ([elementName isEqualToString:@"MediaContainer"]) { 
     NSString *size = [attributeDict objectForKey:@"size"]; 
    } 
} 
+0

這工作,但現在我遇到了,我希望你能一個新問題幫助我。我有一個If語句,看起來像這樣, if([elementName isEqualToString:@「Directory」]){ NSString * size = [attributeDict objectForKey:@「path」]; NSLog(@「I Ran:%@」,size); } 大小打印出爲空,然而這個if語句 如果([的ElementName isEqualToString:@ 「指南」]){ 的NSString *尺寸= [attributeDict objectForKey:@ 「標題」]; NSLog(@「I Ran:%@」,size); } 工作正常,打印出正確的信息,我不明白爲什麼會這樣。 – 2012-08-06 00:20:36

+0

其實剛解決了它,結果我使用了錯誤的URL。感謝您的幫助 – 2012-08-06 00:45:01