Jump to content


Forumul s-a mutat!

Aceasta este arhiva forumului MacForum.ro din perioada 2010-2014.
Noul forum poate fi accesat aici.
Conturile vechi nu mai sunt valabile pe noul forum!

Photo

NSXMLParser pentru incepatori


  • Please log in to reply
3 replies to this topic

#1 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 15 January 2011 - 14:57

Ieri am rezolvat o mica problema legata de un fisier XML si o sa pun aici rezolvarea in caz ca au si altii nevoie.
Pentru a salva datele unui fisier XML de pe un website intr-un array sau dictionar al aplicatiei se creaza un url:

NSURL *url = [NSURL URLWithString: @"adresa web cu XML-ul"];

Apoi se creaza un parser:

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL: url];

Apoi se incepe analiza XML-ului apeland metoda "parse":

[parser parse];

viewController-ul trebuie sa adopte protocolul NSXMLParser si sa implementeze urmatoarele 3 delegate methods:

// metoda 1 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict

Metoda este trimisa de catre parser catre delegat cand intalneste inceputul unui tag iar aici putem cauta ceea ce ne trebuie,ex tag-ul "Rate":

if([elementName compare: @"Rate"] == NSOrderedSame)
		[tempString setString: @""];

tempString este declarat ca NSMUtableString in viewController si la inceputul tag-ului ce il setam @"".

// metoda 2
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

Metoda este trimisa de parser pentru a oferi delegatului toate caracterele elementului curent.

[tempString appendString: string];

trebuie apelata metoda appendString: pentru a adauga caracter cu caracter in tempString deoarece metoda delegat este trimisa de mai multe ori si nu se poate salva direct string-ul.

// metoda 3
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

Metoda este trimisa de parser catre delegat cand intalneste sfarsitul tag-ului.

if([elementName compare: @"Rate"] == NSOrderedSame)
{
   // se face o copie la tempString pentru a avea alta adresa de memorie.
   // se adauga string-ul in array apoi se elibereaza memoria,deoarece str a fost creat cu metoda mutableCopy.
   NSMutableString *str = [tempString mutableCopy];
   [array addObject: str];
   str release]; 
}


#2 Eugen Mihalache

Eugen Mihalache

    Psihoterapeut

  • Membri
  • PipPipPipPipPip
  • 1620 posts
  • LocationBad Griesbach im Rottal

Posted 15 January 2011 - 16:05

Ei! Uite! Ceva de genul așteptam în aplicațiile tale pentru iPhone.
Deci, dacă continuăm așa, ca în acest dialog, o sfârșim perfect.

Edited by Eugen Mihalache, 15 January 2011 - 16:06.


#3 Alex Deva

Alex Deva

    Membru nou

  • Membri
  • Pip
  • 15 posts
  • LocationTîrgu Mureș, România

Posted 15 January 2011 - 16:19

Același lucru în Ruby:

REXML::Document.new(open('http://www.site.cu.xml').read).root.name

the end :)

#4 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 15 January 2011 - 18:16

Același lucru în Ruby:

REXML::Document.new(open('http://www.site.cu.xml').read).root.name

the end :)


Super tare :))




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users