1

几天来,我一直在想办法弄清楚如何在可可和目标 C 中解析这个 xml 文档。我已经将它加载到 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 文档的棘手之处在于每个节点都有多个属性。所以当我去 [node XMLString] 时,我得到了仍然没有意义的完整字符串。他们是一种从节点中提取单个属性的方法吗,例如类似于名为 getAttribute(String) 的 java XML 方法,它允许我输入字符串参数的属性名称并返回绑定到它的值,例如例如 getAttribute("Size") 将返回一个值为 4 的字符串。

任何帮助将不胜感激。

4

1 回答 1

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"];
   }
}
于 2012-08-05T20:48:01.690 回答