2011-10-01 1 views
0

,아이폰 프로그래밍에서 여러 노드와 같은 이름으로 nsxmlparser를 사용하여 XML을 구문 분석하는 방법은 무엇입니까? 나는 모든 이미지를 필요로하는 경우 어떻게 NSXMLParser를 사용하여 분석 할 수

<title>Title</title> 
<description>my description is here </description> 

<images> 

<image>http://www.sosmoths.com/mothImages/800px-Tineola.bisselliella.7218.jpg</image> 

<image>http://www.sosmoths.com/mothImages/800px-Tineola.bisselliella.mounted.jpg</image> 

<image>http://www.sosmoths.com/mothImages/800px-XN_Tineola_bisselliella_1.jpg</image> 

<image>http://www.sosmoths.com/mothImages/Tineola_bisselliella.JPG</image> 

</images> 

는 제목, 설명, 그래서 같은 XML을 구문 분석하는 방법을, 나는 이미지 노드에 대한 혼란 스러워요, 내가 사용하는 생각하고 같이 이상의 노드가 있습니다 이 NSMutableArray,하지만 여전히 코드를 명확하게하지?

+0

는 – Ron

+0

이 http://sosmoths.com/.xml/moths.xml –

+0

이 XML입니다 전체 URL을 제공하십시오 ROM, 지금 할 수있는 일, NSXMLParser, touchXML 또는 다른 @Ron –

답변

3
use this it work 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{ 
    NSLog(@"%@",elementName); 
    if([elementName isEqualToString:@"moths"]){ 
     mytblarray=[[NSMutableArray alloc] init]; 
    } else if([elementName isEqualToString:@"moth"]){ 
     tmpdic=[[NSMutableDictionary alloc] init]; 
    } 
    else if([elementName isEqualToString:@"images"]){ 
     imgArray=[[NSMutableArray alloc] init]; 
    } 

} 

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

    if(tmpstr!=nil && [tmpstr retainCount]>0){ [tmpstr release]; tmpstr=nil; } 
    tmpstr=[[NSString alloc] initWithString:string]; 

} 

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

    if([elementName isEqualToString:@"moth"]){ 
     [mytblarray addObject:tmpdic]; 
     [tmpdic release]; 
    }if([elementName isEqualToString:@"images"]){ 
     [tmpdic setValue:imgArray forKey:elementName]; 
    } 
    else if([elementName isEqualToString:@"image"]){ 
     [imgArray addObject:tmpstr];   
    } 
} 
+0

고맙습니다 Ron, 오늘 밤에 신청하고 upvoted하고 나를 위해 작동한다면 대답을 받아 들일 것입니다 –

+0

나는 대답을 받아 들였습니다. 그러나 거기에 또 하나의 질문이 있습니다, 모든 제목, 그들의 각각의 컨트롤러에 데이터를 저장해야합니다. 4 개의 다른 객체에 4 개의 데이터를 저장할 수있는 방법 –

+0

u가 4 개월의 데이터를 사전에 다른 목적으로 저장하고 싶다면 u 현재 시간 이후의 이미지처럼 이전 키에 따라 동적 키를 생성하십시오 – Ron

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

{

if ([elementName isEqualToString:"<image>"]) 
     { 
      [imagearray addObject:imageurl]; 

     } 

}

이 전에 당신은 코드를 제공해 당신을 도울 수 위의 다음 수행의 요소 이름을 찾을 필요가있다. initWithData에서

+0

이 아닌 이미지 배열 초기화 위치를 사용하고 싶습니다. –

+0

요청을 전달할 때 initWithData : method.Means에서 가져올 수 있습니다. –

1
  1. 인출 사전 : 메도 타이틀 등 키로
  2. 테이크 값 설명 이미지 태그 ALLOC의 image_array에
    didStartElement 방법에서
  3. ,
  4. didEndElement 방법에서, 이미지 태그 이미지 (여기에 이미지 링크)를 image_array에 추가
  5. 이제 didEndElement 메소드에서 이미지 태그 광고 D 키 이미지
  6. 전부

같은 기본 사전에 그 배열은 .....

관련 문제