2009-11-12 1 views
3

NSXMLParser로 일부 HTML을 구문 분석 중이며 앰퍼샌드가 발생할 때마다 파서 오류가 발생합니다. 내가 구문 분석하기 전에 앰퍼샌드를 걸러 낼 수는 있지만 필자는 거기에있는 모든 것을 구문 분석하려고합니다.NSXMLParser는 앰퍼샌드에서 &

오류 68, NSXMLParserNAMERequiredError : Name이 필요합니다.

가장 좋은 추측은 문자 집합 문제라는 것입니다. 나는 캐릭터 세트의 세계에서 조금 퍼지기 때문에, 내 무지가 나를 엉덩이에 물고 있다고 생각하고있다. 소스 HTML은 문자 집합 ISO-8859-1을 사용, 그래서 파서 초기화하는 코드를 사용하고 있습니다 :

NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding] autorelease]; 
NSData *dataEncoded = [[dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] autorelease]; 
NSXMLParser *theParser = [[NSXMLParser alloc] initWithData:dataEncoded]; 

어떤 아이디어?

+2

XML 파서? 어떻게 그 일이 계속 될 것입니까? 어쨌든, 노출되지 않은 앰퍼샌드는 HTML과 XML 모두에서 유효하지 않으므로 실제 깨진 HTML에 대한 파서를 찾아야합니다. 이는 XML 구문 분석보다 훨씬 더 어려운 작업입니다. – bobince

답변

7

다른 포스터로 : 물론 XML은 유효하지 않습니다 ... HTML입니다!

당신은 아마 HTML에 대한 NSXMLParser를 사용하려고 시도해서는 안하지만, this article를 확인하는 이유에 대해 자세히 살펴 오히려 libxml2

.

+0

좋아, 그럼. 직업에 대한 잘못된 도구? 팁 고마워. 나는 그것을해야 할 수도 있습니다. – Silromen

+1

HTML에 대해 좋은 점은 NSXMLParser 부분이 나를 버렸다. libxml2는 매우 합리적인 대안으로 보인다. 이 이전 기사를 참조하십시오 : http://stackoverflow.com/questions/405749/parsing-html-on-the-iphone –

2

유효한 XML을 가지고 계십니까? & 같은 이스케이프 된 특수 문자가 있어야합니다. 원시 XML 파일에 표시됩니다. &

0
NSString 어쨌든 당신 자신 (dataUsingEncoding)에 의해 할당되지 않은 객체를 autoreleasing하는, 나를 위해 일을 통해 데이터를 인코딩

, 그래서 충돌이 솔루션은 다음과 같습니다 당신이 HTML을 구문 분석하고

NSString *dataString = [[NSString alloc] initWithData:data 
          encoding:NSISOLatin1StringEncoding]; 

NSData *dataEncoded = [dataString dataUsingEncoding:NSUTF8StringEncoding 
            allowLossyConversion:YES]; 

[dataString release]; 

NSXMLParser *theParser = [[NSXMLParser alloc] initWithData:dataEncoded]; 
+0

답변을 수정하고 코드를 포맷하십시오 (읽을 수는 없습니다) – kleopatra