从NSXMLDocument节点获取属性信息

问题描述:

我已经打了几天我的脑袋进入墙壁,现在试图弄清楚如何解析可可和客观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的字符串。

任何帮助将不胜感激。

如果您正在使用的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