2012-06-11 1 views
2

나는 연속적인 태그가 img id="#"인데, #은 1에서 9까지 변합니다.다음 XML을 파싱 할 수 없습니까?

태그의 설명은 부동 값으로 구성됩니다.

표준 NSXML 파서를 사용하면 모든 값을 가져올 수 없습니다. 참조

내 XML :

<img id="1">-0.0111328,-0.0635608,0.152549,0.11211,-0.0250431, 

      -0.0370875,0.0862391,0.0970791,-0.0195908, 

      -0.00892297,0.0791795,0.0554013,0.00362028,0.0138572,0.0432729, 

      0.0253036,-0.0770325,0.14065,0.118424,0.1787, 

      0.0734354,0.160883,0.101831,0.237038,0.0681151,0.178331, 

      0.106532,0.224731,0.133766,0.222096,0.165214,0.240752, 

      -0.0280366,0.106239,0.052094,0.110642, 

</img> 

가 어떻게 위의 XML을 구문 분석?

친절하게 도와주세요.

고맙습니다

+2

코드는 어디에 있습니까? 당신이 시도한 것을 보여주십시오. –

+1

또한 코드에서 얻을 수있는 값을 보여주십시오. – Raptor

+0

@MattBall 다음 답변을 시도한 후, 나는 분명히 솔루션이나 다른 사람들을위한 참조를 얻으려면 내 전체 답변을 게시 할 것입니다. – madLokesh

답변

0

마지막으로 가져 왔습니다 ... img id = '#'에 대한 시작 및 종료 태그를 배치했습니다. 내 구조는 이제 다음과 같습니다.

<images> 

    <img id = '1'> -0.0111328,-0.0635608,0.152549,0.11211,-0.0250431, 

     -0.0370875,0.0862391,0.0970791,-0.0195908, 

     -0.00892297,0.0791795,0.0554013,0.00362028,0.0138572,0.0432729, 

     0.0253036,-0.0770325,0.14065,0.118424,0.1787, 

     0.0734354,0.160883,0.101831,0.237038,0.0681151,0.178331, 

     0.106532,0.224731,0.133766,0.222096,0.165214,0.240752, 

     -0.0280366,0.106239,0.052094,0.110642, .... 

    </img> 

    <img id = '2'> ... 

    </img> 

    .... 

    .... 

</images> 

<mapping> 

    <map> 
    <imgid> 1 </imgid> 
    <keyword> heavy </keyword> 

    </map> 

    <map> 
    <imgid> 2 </imgid> 
    <keyword> metal </keyword> 

    </map> 

    ... 

    ... 

</mapping> 

전체 XML을 구문 분석 할 수 있도록 시작 및 종료 태그를 배치 할 수 있습니다.

이전의 시작 및 종료 태그는 하나의 이미지를 파싱 한 개별 이미지에 대한 태그였습니다.

이렇게하면 XML을 구문 분석하는 동안 또 다른 핵심 사항을 추가 할 수 있습니다.

다른 사람들에게도 도움이되기를 바랍니다.

2

parser:foundCharacters: 한 번에 모든 문자를 제공하지 않기 때문입니다. <img> 태그에 대해 얻은 parser:didStartElement:namespaceURI:qualifiedName:attributes:parser:didEndElement:namespaceURI:qualifiedName:의 콜백 사이에있는 모든 문자열을 연결해야합니다.

아래 코드에서 buf은 파서 위임자의 NSMutableString ivar입니다.

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([qualifiedName isEqualToString:@"img"]) { 
     buf = [NSMutableString string]; 
    } 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([qualifiedName isEqualToString:@"img"]) { 
     buf = [buf stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
     NSLog(@"Got %@", buf); 
    } 
} 

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [buf appendString:string]; 
}