سؤال

أنا أعاني من مشاكل غريبة تحليل (على ما يبدو) الصحيح البرمجية 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

الشيء المضحك هو أن, إذا كنت تحليل هذه الخطوط متفرد ليس لدي أي مشاكل ، محلل dosent ضجة في كل شيء!

بلدي تحليل الكود هو:

    // 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 كاملة مع دخول واحد فقط "ملف"؟ إذا كان هذا هو الحال، ثم نهج آخر يتمثل في إعداد وثيقة XML مع اثنين من مداخل "ملف"، واحد مع ملف 0 وملف 1، واحد مع ملف 1 وملف 2، واحد مع ملف 2 وfile3 وغيرها، و معرفة ما إذا كان جميع أزواج تعمل بشكل صحيح. اعتمادا على كيفية كنت تمرير 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 يعتقد بعض المساحة المطلوبة في 24 عمود من 13 خط.

يمكن أن قمت بنشر بيانات XML على pastebin حتى نتمكن من إلقاء نظرة على البيانات الخام?وأظن أن إما أنت أو تجاوز سعة مكدس تغير البيانات في بعض الطريق (ربما من أجل التنسيق الأسباب) وهذا ألقى من على خط المرمى/عمود الأرقام من ما NSXMLParser هو تقديم التقارير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top