2012-09-26 45 views
5

Tôi đang làm việc trên một ứng dụng, tìm kiếm trên máy chủ riêng và hiển thị kết quả cho người dùng. Vấn đề là NSXLParser không thể phân tích cú pháp các ký tự đặc biệt của Đức và Pháp. Ví dụ: nó phải là: (Geschäftsführer) -> những gì tôi nhận được là: (äftsführer)NSXMLParser không thể phân tích các ký tự đặc biệt (tiếng Đức và tiếng Pháp)

Làm thế nào tôi có thể sửa lỗi này?

đây là mã của tôi:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementname isEqualToString:@"results"]) 
    { 
     currentJob = [SearchResult alloc]; 
    } 

} 

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 


    if ([elementname isEqualToString:@"jobTitle"]) 
    { 
     currentJob.jobTitle = currentNodeContent; 
    } 

    if ([elementname isEqualToString:@"location"]) 
    { 
     currentJob.shortAddress = currentNodeContent; 
    } 

    if ([elementname isEqualToString:@"companyName"]) 
    { 
     currentJob.employer = currentNodeContent; 
    } 

    if ([elementname isEqualToString:@"results"]) 
    { 
     [self.jobs addObject:currentJob]; 
     currentJob = nil; 
     currentNodeContent = nil; 
    } 
} 

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao ... Cảm ơn trước

+0

bạn có thể cung cấp liên kết tới tệp XML mà bạn đang phân tích cú pháp không? – kuba

+0

cũng là phương thức 'foundCharacters' của bạn sai - bạn có thể nhận được nhiều cuộc gọi đến hàm này ngay cả đối với một giá trị chuỗi đơn – kuba

Trả lời

3

phương pháp của bạn foundCharacters nên nối thêm chuỗi đến một đối tượng NSMutableString, bởi vì nó có thể được gọi nhiều lần cho một giá trị duy nhất. Trong didStartElement, khởi tạo một đối tượng NSMutableString (chúng ta hãy gọi nó elementContentString), sau đó làm điều này:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)chars 
{ 
    [self.elementContentString appendString:chars]; 
} 

Và trong bạn didEndElement bạn có thể lấy nội dung như là một chuỗi. Lưu ý rằng bạn nên tạo một bản sao không thể thay đổi được (vì vậy bạn không ghi đè lên nó bằng phần tử tiếp theo), sử dụng [NSString stringWithString:self.elementContentString].

+0

Cảm ơn bạn rất nhiều! Tôi đã sử dụng đoạn mã sau và nó hoạt động ngay bây giờ. if (! elementContentString) elementContentString = [[NSMutableString alloc] initWithString: string]; else [elementContentString appendString: string]; – Zer0

+0

Tôi có ký tự 'làm cho trình phân tích cú pháp của tôi dừng lại. Làm cách nào để xử lý? Phương thức findCharacters của tôi trông giống như phương thức @kuba đề xuất. – marciokoko

Các vấn đề liên quan