2010-07-16 1 views
1

"웹 사이트에서 콘텐츠를 다운로드 할 수 없습니다"현재 XML 행을 이미 구문 분석하려고합니다 (웹 호출이 필요 없음). 내 응용 프로그램은 Objective-C의 기본 iPhone입니다. initWithData : xmlData를 사용하는 NSXMLParser 델리게이트 클래스를 설정했습니다. 어떤 이유로, 내 위임에 최초의 유일한 콜백 파서입니다 : 다음 텍스트로 parseErrorOccurred : 내가 웹에서 아무것도 요구하지 않기 때문에
NSXMLParser initWithData

"Unable to download content from web site (Error code 5)" 

은 분명히, 이것은 말도 안돼. 여전히 뭔가를 불러내는데 비공개 URL 속성을 사용하고있을 수 있습니까?

위임 클래스 XmlParser가 :

- (void)parseXmlString:(NSString *)xml parseError:(NSError **)error { 
    DEBUG_NSLog(@"XML Parser: Called with string: %@", xml); 

    NSData *xmlData = [xml dataUsingEncoding:NSASCIIStringEncoding]; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData]; 

    // Set self as the delegate of the parser so that it will receive the parser delegate methods callbacks. 
    if (parser != nil) { 
     [parser setDelegate:self]; 
     [parser setShouldProcessNamespaces:NO]; 
     [parser setShouldReportNamespacePrefixes:NO]; 
     [parser setShouldResolveExternalEntities:NO]; 
     [parser parse]; 

     NSError *parseError = [parser parserError]; 
     if (parseError && error) { 
      *error = parseError; 
     } 

     [parser release]; 
    } 
} 

가에서 호출 : 여기

몇 가지 코드

aString이있는 NSString 포함 된 XML입니다
XmlParser *parser = [[XmlParser alloc] init]; 
NSError *error = nil; 
[parser parseXmlString:aString parseError:&error]; 
if (error) { 
    DEBUG_NSLog(@"ERROR FROM PARSER"); 
} 

(참고 : 헤더없이). 라고

오류 콜백 :

코드가 실행
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { 
    NSString * errorString = [NSString stringWithFormat:@"Unable to download content from web site (Error code %i)", [parseError code]]; 
    DEBUG_NSLog(@"XML Parser ERROR: %@", errorString); 
    [parser abortParsing]; 
} 

의 parseErrorOccurred는 [파서 구문 분석] 후 즉시 안타와 그래, 난 등

의 didStartDocument, didEndDocument의 각을 구현 한

감사합니다.

UPDATE : 그것을 디버깅에서

내가 만든 XMLDATA 객체가 나는 dataUsingEncoding에 전달하는 XML 문자열 데이터를 많이에도 불구하고, 0 바이트 것 같다. 인코딩이 문제입니까?

xml 요소 중 하나에 중첩 된 html이 들어 있습니다. 나는 "s와 & 's이 (가) 문제가 될 수 희망이 일을."고 생각하고 있어요 -.> \ "그것을 수정합니다

어느 쪽도없는 문제를 해결 따옴표를 이스케이프 또는 & 어떤 &의를 교체 할 수있다. 문자열에 태그를 갖는 뭔가 잘못 될 나는 샘플 XML 데이터와 코드 위에 시도

+0

수정에 대한 내 답변보기 : – willcodejavaforfood

+0

이 문제가 해결 되었습니까? – falconcreek

답변

1

오류 메시지가 실제 오류를 숨기고 있습니다. 오류 코드가 "오류 코드 5"이므로 xmlstring이 유효하지 않은 것 같습니다. 이 다른 질문을 참조하십시오. NSXMLparser errorcode 5

업데이트

그 STIL 실패 할 경우 XMLDATA 인스턴스 대신 NSASCIIStringEncoding 의 NSUTF8StringEncoding를 사용하여 생성 할 때, 실제 문자열을 게시 할 수 있습니다. 빈 데이터 객체를 파서에 전달하면 오류가 발생합니다.

+0

을 참조하십시오 ... 감사합니다. – TahoeWolverine

+0

문제 없음 . BTW "다운로드 오류"이이 줄에서 오는 것입니다. NSString * errorString = [NSString stringWithFormat : @ "웹 사이트에서 콘텐츠를 다운로드 할 수 없습니다 (오류 코드 % i)", [parseError code]]; – falconcreek

+0

예, 감사합니다. 업데이트를보고 귀하의 의견을 알려주십시오. – TahoeWolverine

1

-이 위대한 작품을 당신이 함수에 전달할 XML 데이터에 몇 가지 문제가있는 것처럼 보이

확인합니다.. 귀하의 XML 데이터 또는 추가 분석을 위해 XML 입력 공유 ...

+0

감사합니다. 업데이트를 참조하십시오. – TahoeWolverine

+0

현재 문제는 XML 데이터 인코딩 문제입니다. 값 부분은 '<' or '>'이 아니어야합니다. 그렇지 않으면 XML 데이터를 적절하게 인코딩합니다 ... –

+0

'\'는 이스케이프에 사용할 수없는 XML 태그 구조의 일부입니다. –

1

xml에 <자를 사용할 수 없습니다.다음과 같이 바꾸십시오 :

< = &lt; 

> = &gt; 
+0

xml의 <>와 html의 <>를 구별하는 방법은 무엇입니까? – TahoeWolverine

1

첫 번째 구문 분석 오류는 항상 치명적입니다. 구문 분석 오류가있는 경우 유효한 XML이 아닙니다.

원시 HTML을 HTML 엔터티로 인코딩해야합니다. 앱에서 생생한 HTML (사용자 또는 제 3 자 소스로부터)이 압축되면 Bad Idea ™로 간주됩니다.

+0

인코딩 팁 주셔서 감사합니다. 엔티티에 대해 이야기하는 내용의 스 니펫을 가지고 있습니까? 아니면 falconcreek이 제안한 것을 수행하는 것입니까? – TahoeWolverine

+0

일단 유효한 데이터 객체를 파서에 전달할 수 있다면 엔티티에 대해 걱정할 필요가 있습니다. – falconcreek