2011-11-11 4 views
0

NSXMLParser를 사용하여 다음 XML 코드에서 다음 문자열 (sqrt (2 x)^(7/6) × (7/6)/(4/9))을 가져옵니다.NSXMLParser는 유니 코드 문자로 문자열을 나눕니다.

<pod title='Input' 
    scanner='Identity' 
    id='Input' 
    position='100' 
    error='false' 
    numsubpods='1'> 
    <subpod title=''> 
    <plaintext>sqrt(2 x)^(7/6)×(7/6)/(4/9)</plaintext> 
    </subpod> 
</pod> 

되지만 출력 문자열 (NSLog 이용)은 다음과 같은 결과를 반환 foundCharacters 함수에 의해 두 개의 스트링으로 분할되고 :

2011-11-11 18 : 29 : 46.005 볼프람 API-을 테스트 [35959 : f803] sqrt (2 x)^(7/6) 2011-11-11 18 : 29 : 46.005 Wolfram API 테스트 [35959 : f803] × (7/6)/(4/9)

,451,515,

구문 분석에 대한 코드는 다음과 같습니다

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string{ 
    if (elementFound) { 
     [string canBeConvertedToEncoding:NSASCIIStringEncoding]; 
     NSLog(@"%@", string); 
    } 

}

그래서 내 질문은 왜 출력 문자열이 두 개의 문자열로 분리되고 있습니까?

답변

0

이 경우 왜 분할되어 있는지 잘 모르겠지만 일반적으로 -parser:foundCharacters:에서 얻은 데이터는 모두 한꺼번에 반환 될 것으로 기대해서는 안됩니다. 대신, 그 메소드로부터 얻은 문자를 문자열에 축적해야합니다. 파서 위임자에게 종료 태그가 수신되었음을 알릴 때 무언가를 할 수 있습니다. -parser:didEndElement:...

유니 코드 문자가 데이터가 분할 된 이유 일 수도 있고 그렇지 않을 수도 있습니다. 너의 코드에 상관 없어.

+0

그건 좋은 생각이지만 문제는 내가 -parser : didStartElement를 사용해야한다는 것입니다. 속성을 사용하여 얻을 수있는 속성 사전에 액세스해야하기 때문에 : didStartElement : (NSDictionary *) attributeDict하지만 -parser와 함께 할 수는 없습니다 : didEndElemet –

+0

didStartElement, foundCharacters 및 didEndElement의 3 가지 방법을 모두 사용해야합니다. 첫 번째 두 개는 필요에 따라 데이터를 저장할 수 있지만 전체 요소가 필요한 경우 didEndElement까지 해당 데이터를 처리 할 수 ​​없습니다. 이것은 NSXMLParser가 작동하는 방법입니다. 문제가있는 경우 TouchXML과 같은 XML 구문 분석에 대해 다른 접근 방식을 사용하는 것이 좋습니다. – Caleb

+0

오키, 정말 고마워요! :디 –

관련 문제