2012-08-05 12 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 문서를 까다롭게 만드는 것은 각 노드에 여러 속성이 있다는 것입니다. 그래서 [node XMLString]을 실행하면 여전히 의미없는 전체 문자열이 반환됩니다. 그들의 노드에서 단일 속성을 가져 오는 방법, 예를 들어 getAttribute (String)이라는 Java XML 메서드와 비슷한 문자열 인수의 특성 이름을 넣을 수있는 값을 반환합니다. 예를 들어, getAttribute ("Size")는 값이 4 인 문자열을 반환합니다.

도움이 될만한 점이 있으면 큰 도움이 될 것입니다. 당신이 NSXMLParser를 사용하는 경우

답변

0

당신은 XML 요소의 속성을 얻기 위해 다음 NSXMLParserDelegate 방법을 사용할 수 있습니다 작동

- (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); } 크기 인쇄 출력에 null 그러나이 if 문 경우 ([isEqualToString가 elementName "디렉토리"@]) { 크기는 NSString * = [attributeDict objectForKey : @ "제목"]; NSLog (@ "I Ran : % @", size); } 제대로 작동하고 올바른 정보를 인쇄 할 수없는 이유를 이해할 수 없습니다. –

+0

실제로 그것을 풀어 봤는데, 잘못된 URL을 사용하고있는 것으로 판명되었습니다. 도와 줘서 고마워. –