የ XML ፋይሎችን በ Xcode ውስጥ እንዴት መተንተን እንደሚቻል

ለብዙ መተግበሪያዎች የጀርባ አጥንት የሆነ አንድ ቀላል ተግባር የ XML ፋይሎችን የመተንተን ችሎታ ነው. እና, እንደ ዕድል ሆኖ, Xcode በኮምፒዩተር ላይ የ XML ፋይልን ለመተንተን በአንፃራዊነት ቀላል ያደርገዋል.

አንድ የኤክስኤምኤል ፋይል ስለ የእርስዎ መተግበሪያ መሠረታዊ መረጃ ከ RSS ምግብ ለድር ጣቢያ የሆነ ነገር ሊኖረው ይችላል. በመተግበሪያዎ ውስጥ በርቀት ውስጥ መረጃን የማዘመን አሪፍ መንገዶችን ሊሆኑ ይችላሉ, በዚህም ወደ ዝርዝር ውስጥ አዲስ ንጥል ለመጨመር አዲስ አታይን ወደ አፕል ማስገባት ያለውን ፍላጎት በማለፍ በኩል.

ስለዚህ በ Xcode ውስጥ የ XML ፋይሎችን እንዴት እናስሄዳለን? ሂደቱ ተለዋዋጭዎችን ለማስነሳት, XML parser ሂደትን, የፋይሉን ሂደት መመገብን, በእያንዳንዱ አባል ውስጥ ያሉ ቁምፊዎችን (እሴት) የግለሰብ አባል መጨረሻ እና የመተንተን ሂደት መጨረሻ.

በዚህ ምሳሌ ውስጥ, አንድ የተወሰነ የድር አድራሻ ( ዩአርኤል ) በማስተላለፍ ፋይልን ከበይነመረቡ እንተካለን.

የአርዕስት ፋይል በመገንባት እንጀምራለን. ይህ ለፋይል እይታ ተቆጣጣሪ በጣም አስፈላጊ የሆነ የራስጌ ዓባሪ ፋይሎን ነው.

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * ጽሑፎች;
NSMutableDictionary * item;
NSString * currentElement;
NSMutableString * ElementValue;
የ BOOL ስህተት ፓርሲንግ;
}

@property (ያልተናጣ, ያልተጠበቀ) IBOutlet ዝርዝርViewController * detailViewController;

- (void) parseXMLFileAtURL: (NSString *) URL;

የ parseXMLFileAtURL ተግባሩን ሂደቱን ይጀምራል. ሲጨርሱ, NSMutableArray "ፅሁፎች" ውሂባችንን ይይዘዋል. ስብስቡ በ XML ፋይል ውስጥ ካለው መስክ ስሞች ጋር የሚዛመዱ መዝገበ ቃላቶችን ይጠቀማል.

አሁን የሚያስፈልጉትን ተለዋዋጮች ማዋቀር አሁን በ .m ፋይል ውስጥ ወደ ሂደቱ ስብሰባ ላይ ወደፊት እንጓዛለን:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "ፋይል ተገኝቷል እና አሰሳ ተጀምሯል");

}

ይህ ተግባር በሂደቱ መጀመሪያ ላይ ይሠራል. በዚህ ተግባር ውስጥ ምንም ነገር ማስቀመጥ አያስፈልግዎትም, ነገር ግን ፋይሉ ሲተነተን አንድ ተግባር መፈጸም ከፈለጉ ይህ ማለት ኮድዎን ያስቀምጡበት ነው.

- (void) parseXMLFileAtURL: (NSString *) URL
{

NSString * agentString = @ "ሞዚላ / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; እኛ-አውጣን) AppleWebKit / 525.27.1 (KHTML, ልክ እንደ ጂኬ) ስሪት / 3.2.1 Safari / 525.27.1";
NSMutableURLRecommest * request = [NSMutableURLየመጠየቅ ጥያቄእርአርኤል:
[NSURL URLWithString: URL]];
[ጥያቄ ወሰንታሪክ-ኤን ኤ ኤም ኤስ ኤክስፐርቶች: @ "የተጠቃሚ-ወኪል"];
xmlFile = [NSURLConnection sendSynchronousRequest: መልሶችን መመለስ መልስ: nil error: nil];


ጽሑፎች = [[NSMutableArray alloc] init];
errorParsing = አይደለም;

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];

// እነዚህን በመተንተሪ የቀረበው የ ኤክስ.ኤም.ኤል ዓይነት ዓይነት ላይ ከእነዚህ የተወሰኑትን ማዞር ያስፈልግዎታል
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser parse];

}

ይህ ተግባር ሞተሩ ከአንድ የተወሰነ የድር አድራሻ (ዩአርኤል) ላይ አንድ ፋይል እንዲያወርድ እና እንዲተነተን ሂደቱን ይጀምራል.

አገልጋዩ iPhone / iPad ወደ ተንቀሳቃሽ ስሪቱ ለማዛወር ቢሞክር ብቻ የሩቅ አገልጋዩን በ Mac ላይ እያለን መሆኑን እየነገረን ነው.

በመጨረሻው ያሉት አማራጮች ለአንዳንድ XML ፋይሎች የተወሰኑ ናቸው. አብዛኛዎቹ የ RSS ፋይሎችን እና የተለመዱ የኤክስኤምኤል ፋይሎችን ማጥፋት አያስፈልጋቸውም.

- (void) parser: (NSXMLParser *) parser parseErrorኦክልት (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "የስህተት ኮድ% i", [ስሕተት ስህተት]];
NSLog (@ "XML XML የመተንተን ስህተት: errorString");


errorParsing = YES;
}

ይህ ስህተት ካጋጠመ የሁለትዮሽ እሴት የሚያዘጋጅ ቀለል ያለ የደሕንነት ምርመራ ማድረጊያ መስመር ነው. እርስዎ በሚሰሩት ላይ ተመርኩዞ የበለጠ እዚህ የተለየ ነገር ያስፈልጎት ይሆናል. ስህተት ከተፈጠረ በኋላ የተወሰነ ኮድ ማስኬድ ካስፈለገ ስህተት የስህተት ሁለትዮሽ ተለዋዋጭ በዛ ጊዜ ሊጠራ ይችላል.

- (void) parser: (NSXMLParser *) ተለጣፊ ተጀምሯል: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualiName: (NSString *) qName attributes: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
([elementName isEqualToString: @ "item"])] {
item = [[NSMutableDictionary] init];

}

}

የ XML ምጣኔን ስጋ ሶስት ተግባራት ይዟል, ከእያንዳንዱ ኤለመንት ላይ ጅማሮ የሚመራ, በአባሩ መጨረሻ ላይ የሚጓዘው እና በመተንተን መካከል መካን የሚያደርግ.

ለዚህ ምሳሌ, ኤክስኤምኤል ውስጥ ያሉ "አባሎች" በሚለው ርእስ ውስጥ ኤድሎችን ስብስቦችን የሚያዋህዱ ከ RSS ጋር ተዛማጅነት ያላቸውን ፋይሎች እንተካለን. በሂደቱ መጀመሪያ ላይ የአንድን አባል << ንጥል << እየመረመርን እና አዲስ ቡድን ሲገኝ የእኛን የቃላት መዝገበ-ቃላችንን እየመራን ነው. አለበለዚያ, ለዋጋው ተለዋዋጭውን እናስጀምርና.

- (void) parser: (NSXMLParser *) ተገኝቷል ተገኝቷል ነባሪዎች: (NSString *) string {
[ElementValue appendString: string];
}

ይህ ቀላል ክፍል ነው. ቁምፊዎችን ስናገኝ, በተለዋዋጭ "ElementValue" ላይ በቀላሉ እናክለዋቸዋለን.

- (void) parser: (NSXMLParser *) ተለጣፊ ተካቷል: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualiName: (NSString *) qName {
([elementName isEqualToString: @ "item"])] {
[ጽሁፎች AddObject: [ንጥል ቅጂ]]);
} else {
[item setObject: ElementValue forKey: elementName];
}

}

አንድ ነገር በማስኬድ ላይ ስንሆን, ሁለት ነገሮችን ማድረግ አለብን: (1) የመጨረሻው ክፍል «ንጥል» ከሆነ, ቡድናችን ጨርሰነዋል, ስለዚህ የእኛን መዝገበ ቃላት ወደ " ".

ወይም (2) ኤለመንት «ንጥል» ካልሆነ በኛ መዝገበ-ቃላት ውስጥ ከኤለሙን ስም ጋር በሚዛመድ ቁልፍ እናዘጋጃለን. (ይህ ማለት በ XML ፋይል ውስጥ ለእያንዳንዱ መስክ የግል ተለዋዋጭ መለኪያ አያስፈልገንም ማለት ነው.

- (void) parserDidEndDocument: (NSXMLParser *) parser {

ከሆነ (ስህተት አዘገጃጀት == የለም)
{
NSLog (@ "XML ሂደት ተጠናቅቋል!");
} else {
NSLog (@ "በ XML ሂደት" ላይ ስህተት ተከስቷል);
}

}

ይህ ለመተርጎም የተለመደ አሰራር አስፈላጊ የመጨረሻው ተግባር ነው. በቀላሉ ሰነዶቹን ያበቃል. ሂደቱን ለማጠናቀቅ የሚፈልጉት ማንኛውም ኮድ እዚህ ወይም እርስዎ ስህተት ቢፈጠር የተለየ ማድረግ የሚገባዎት ማንኛውም ነገር ያስቀምጣሉ.

ብዙ መተግበሪያዎች እዚህ ላይ ሊያደርጉት የሚፈልጉት የውሂብ እና / ወይም የኤክስኤምኤል ፋይልን በመሣሪያው ላይ ወዳለው ፋይል ማስቀመጥ ነው. በዚያ መንገድ, በሚቀጥለው ጊዜ መተግበሪያውን በሚጫኑበት ጊዜ ተጠቃሚው ከበይነመረብ ጋር ካልተገናኘም, አሁንም መረጃውን ማግኘት ይችላሉ.

እርግጥ ነው, በጣም አስፈላጊ የሆነውን ክፍል ልንረሳው አንችልም: የእርስዎን መተግበሪያ ለመተንተን በመግለጽ (እና እሱን ለማግኘት በድር አድራሻ መስጠት)!

ሂደቱን ለማስጀመር, ይህን የድረ-ገጽ ኮድ መስራት በቀላሉ ኤክስኤምኤልን ማቀናበር በሚፈልጉበት ቦታ ላይ መጨመር ይጠበቅብዎታል:

[self parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml"];