2012-06-26 3 views
0

나는 이런 식으로 뭔가 보이는 XML 파일을 구문 분석하는 NSXMLParser를 사용하는 것을 시도하고있다가 발생할 때 나는 다음과 같은 코드를 사용NSXMLParser 오류는 '특별한'문자

<?xml version="1.0" encoding="us-ascii"?> 
<teams> 
    <team id = "A1"> 
     <player1>John</player1> 
     <player2>José</player2> 
    </team> 
    ... 
</teams> 

:

NSString *urlString = [NSString stringWithFormat:@"http://www....abc.php?category=%@&poule=%c", @"S", 'B']; // Obviously, this contains an actual web address 
NSURL *url = [NSURL URLWithString:urlString]; 
NSData *xml = [[NSData alloc] initWithContentsOfURL:url]; // <== 
NSXMLParser *xmlParserObject = [[NSXMLParser alloc]initWithData:xml]; 
[xmlParserObject setDelegate:self]; 
[xmlParserObject parse]; 

및 didStartElement, foundCharacters, didEndElement 및 parserErrorOccurred 대리자 함수를 구현했습니다.

é와 같은 '특수 문자'가 나오기 전까지는 모두 잘 돌아갑니다. 나는 다음에 '< =='로 표시된 부분 대체 그런

parser error: Error Domain=NSXMLParserErrorDomain Code=1544 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 1544.)" 
parser error: Error Domain=NSXMLParserErrorDomain Code=5 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 5.)" 

:

NSError *error; 
NSData *xml = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 
if (xml == nil) { 
    NSLog(@"*** Fatal error: %@\nuserInfo:%@", error, [error userInfo]); 
} 

을 위의 한 외에 다음 오류가 발생했습니다 대리인 방법 parserErrorOccurred 다음과 같은 오류를보고합니다 :

*** Fatal error: Error Domain=NSCocoaErrorDomain Code=261 "The operation couldn’t be completed. (Cocoa error 261.)" UserInfo=0x8158d90 {NSURL=http://www....abc.php?category=S&poule=B, NSStringEncoding=4} 
userInfo:{ 
    NSStringEncoding = 4; 
    NSURL = "http://www....abc.php?category=S&poule=B"; 
} 

I는 또한 NSISOLatin1StringEncoding, NSUTF16StringEncoding, NSASCII 같은 다른 인코더들 중 어느 NSUTF8StringEncoding로 교체하려고 StringEncoding, NSUnicodeStringEncoding 등이 있습니다. 이것은 다음과 같은 오류가 발생했습니다 :

-[__NSCFString bytes]: unrecognized selector sent to instance 0x6e4cbc0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 0x6e4cbc0' 
*** First throw call stack: 
(0x12d0022 0x1781cd6 0x12d1cbd 0x1236ed0 0x1236cb2 0xce5f51 0xb447 0xaa89 0x1f2e330 0x1f2f439 0x908b9b24 0x908bb6fe) 
terminate called throwing an exception(lldb) 

나는 XML의 내용을 통제 할 수 없지만, 실제로 잘못된 정보가 들어 있다면, 어쩌면 내가 웹 마스터에게 이야기 할 수 있습니다.

é 문자를 'e'또는 '?'로 표시해도 괜찮습니다. 그게 필요한 경우.

이 오류의 원인과 해결 방법에 대한 조언은 크게 감사하겠습니다.

Tx!

- GB

답변

0

이 문제에 대한 해결책은 찾지 못했습니다. 그래서 기본적으로

 NSError *error; 
     NSString *xmlText = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error]; 
     xmlText = [xmlText stringByReplacingOccurrencesOfString:@"é" withString:@"e"]; 
     NSData *xml = [xmlText dataUsingEncoding:NSASCIIStringEncoding]; 

, I

  • 은 '특수를 교체하여 해당 문자열을 편집있는 NSString
  • 에 NSURL을 변환 다음을 NSData로 NSURL에서 얻으려면, 다음 코드를 사용했다 '문자
  • 이있는 NSData을 만들기 위해 편집 된 문자열을 사용

나는 또한 내가 NSAS을 사용주었습니다 NSUTF8StringEncoding 대신에 CIIStringEncoding (XML이 지정하지만 이전에는 실패한 코드).

어쨌든, 문제를 해결하기위한 제안은 여전히 ​​환영하지만,이 우회는 당분간 저에게 도움이됩니다 ...