NSXMLPARSER를 사용하여 XML을 구문 분석하는 문제
-
20-09-2019 - |
문제
나는 이상한 문제가 있습니다. 구문 분석 (명백히) 수정 XML 코드!
구문 분석 된 XML은 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<results>
<file id="0" name=" Linux Ubuntu.rar 700.64 2" size="700" disp="2"/>
<file id="1" name=" [Soft] Sistema operativo Linux. Live CD Distro Ubuntu-5.04-live-i386.iso 624.926 4" size="5" disp="4"/>
<file id="2" name=" ubuntu-9.04-server-i386.iso 577.220 2" size="9" disp="2"/>
<file id="3" name=" virtualbox-3.1_3.1.2-56127_Ubuntu_karmic_amd64.deb 43.578 1" size="3" disp="1"/>
<file id="4" name=" [APP-ITA].UBUNTU.LINUX.iso 586.822 2" size="586" disp="2"/>
<file id="5" name=" Ubuntu linux 2007.iso 700.446 1" size="700" disp="1"/>
<file id="6" name=" Installare aMule Adunanza + Liste Server + Liste Nodi su Ubuntu Gutsy [Fastweb 0.72 5" size="0" disp="5"/>
<file id="7" name=" - Guida Per Linux Ubuntu 7.03 Facile Da Usare!!!!!!!La Prima In Ita.rar 731.351 3" size="7" disp="3"/>
<file id="8" name=" Ubuntu Hacks - Tips and Tools for Exploring, Using, and Tuning Linux (O'Reilly, 3.494 1" size="3" disp="1"/>
<file id="9" name=" Linux-ubuntu-8.04.1-desktop-i386.iso 694.498 3" size="8" disp="3"/>
<file id="10" name=" [MANUALE] Ubuntu Linux - Computer Magazine.pdf 86.992 2" size="86" disp="2"/>
<file id="11" name=" (Ebook - Ita - Software) Ubuntu - Desktop Guide.pdf 0.686 3" size="0" disp="3"/>
<file id="12" name=" Installare Amule Adunanza In Ubuntu.rar 0.25 6" size="0" disp="6"/>
<file id="13" name=" UBUNTU LINUX [ITA].PDF 0.536 62" size="0" disp="62"/>
<file id="14" name=" Comandi Fondamentali Ubuntu.rtf 0.67 4" size="0" disp="4"/>
<file id="15" name=" ubuntu Guida.tar 0.160 1" size="0" disp="1"/>
<file id="16" name=" ubuntu-remix-italiano-8.10.iso 702.720 1" size="8" disp="1"/>
</results>
</root>
nsxmlparser는 다음과 같은 오류를 제공합니다.
2010-01-13 20:23:22.500 iMule[1419:20b] Error 65, Description: (null), Line: 13, Column: 24
2010-01-13 20:23:22.516 iMule[1419:20b] Error 4, Description: (null), Line: 1, Column: 1
재미있는 점은, 내가이 줄을 특이하게 구문 분석한다면 나는 아무런 문제가 없다는 것입니다.
내 구문 분석 코드는 다음과 같습니다.
// DELEGATE XML PARSER
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
if([elementName isEqualToString:@"downloads"] || [elementName isEqualToString:@"results"]){
NSLog(@"starting or downloads or results");
if(xmlArray){
xmlArray= nil;
}
self.xmlArray= [[NSMutableArray alloc] init];
if([elementName isEqualToString:@"results"]){
[self.results_controller.activity startAnimating];
}
if([elementName isEqualToString:@"downloads"]){
[self.downloads_Controller.activity startAnimating];
}
}
else if([elementName isEqualToString:@"file"]){
NSLog(@"found file...");
[self.xmlArray addObject:attributeDict];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog(elementName);
if([elementName isEqualToString:@"downloads"] || [elementName isEqualToString:@"results"]){
if([elementName isEqualToString:@"downloads"]){
NSLog(@"downloads found... reloading table");
self.downloads_Controller.downloads= xmlArray;
[self.downloads_Controller.tableView reloadData];
[self.downloads_Controller.activity stopAnimating];
}
else if([elementName isEqualToString:@"results"]){
NSLog(@"results found... reloading table");
self.results_controller.results= xmlArray;
// NSLog(@"xmlarray: %@ and results: %@", xmlArray, self.results_controller.results);
[self.results_controller.tableView reloadData];
[self.results_controller.activity stopAnimating];
}
}
else if([elementName isEqualToString:@"error"]){
UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"Error" message:@"aMule dosent seem to be on" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
NSLog(@"Error %i, Description: %@, Line: %i, Column: %i", [parseError code],
[[parser parserError] localizedDescription], [parser lineNumber],
[parser columnNumber]);
}
- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validError{
NSLog(@"valid: %@", validError);
}
// END DELEGATES XML PARSER
누군가가 무엇을 할 수 있는지에 대한 단서가 있습니까?
감사
해결책
"이 줄을 단 한 번 구문 분석"이라고 말할 때 단일 "파일"항목만으로 완전한 XML 문서를 건네 주셨습니까? 이 경우 또 다른 접근 방식은 파일 0과 파일 1이있는 두 개의 "파일"항목으로 XML 문서를 설정하는 것입니다. 파일 1과 파일 2가 있고 파일 2와 파일 3 등이 있습니다. 모든 쌍이 올바르게 작동하는지 확인하십시오. XML을 파서에 전달하는 방법에 따라 구문 분석 할 때만 나타나는 문제가있을 수 있습니다. 연속 파일 항목.
구문 분석 코드의 시간에 따라 원래 게시물에 추가하는 것이 도움이됩니다.
이 짧은 프로그램은 NSXMLPARSER와 함께 제공된 데이터를 잘 구문 분석합니다.
#import <Foundation/Foundation.h>
int main () {nsautoreLeasePool *pool = [[nsautorEleasePool Alloc] init];
NSData *xml = [NSData dataWithContentsOfFile: @"data.xml"];
NSLog(@"xml: %@", [[NSString alloc] initWithData: xml encoding: NSASCIIStringEncoding]);
NSXMLParser *parser = [[NSXMLParser alloc] initWithData: xml];
if (!parser)
NSLog(@"Unable to initialize parser");
else if ([parser parse])
NSLog(@"Parsed successfully");
else
NSLog(@"Parsing failed: %@", [[parser parserError] localizedDescription]);
[pool release];
return 0;
}
다른 팁
오류 코드를 찾았습니까?
XML 파서는 13 라인의 24 번째 열에서 일부 공간이 필요하다고 생각하는 것 같습니다.
원시 데이터를 볼 수 있도록 페이스트 빈에 XML 데이터를 게시 할 수 있습니까? 귀하 또는 Stack Overflow가 데이터를 어떤 식 으로든 (아마도 형식의 이유로) 변경했다고 생각하며 NSXMLPARSER가보고하는 내용에서 라인/열 번호를 제거했습니다.