TBXML Parser Ervaring

TBXML Parser Ervaring discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Ontwikkelaars, Ik wil in mijn huidige project maar eens TBXML gebruiken, het schijnt: licht, snel en gebruiksvriendelijk te zijn. Graag wil ik weten wat jullie ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 23 July 2012, 11:25
» iPhone 4 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 March 2008
Berichten: 95
Standaard TBXML Parser Ervaring

Ontwikkelaars,

Ik wil in mijn huidige project maar eens TBXML gebruiken, het schijnt: licht, snel en gebruiksvriendelijk te zijn. Graag wil ik weten wat jullie ervaring met de parser zijn.

Ik heb een XML met bijv.
Code:
<assessmentDetails> 
                    <assessment> 
                        <assessmentName>Test1</assessmentName> 
                        <assessmentType>Coursework</assessmentType> 
                        <assessmentWeighting>30</assessmentWeighting>  
                    </assessment> 
                </assessmentDetails>
Het lukt mij bovenstaand XML te parsen, geen probleem. Ik schrijf het uit naar een UILabel in mijn project. Ik gebruik geen TableView.

Maar als ik meerdere childs heb met bijv.
Code:
<assessmentDetails> 
                    <assessment> 
                        <assessmentName>Test1</assessmentName> 
                        <assessmentType>Coursework</assessmentType> 
                        <assessmentWeighting>30</assessmentWeighting> 
                    </assessment> 
                    <assessment> 
                        <assessmentName>Coursework</assessmentName> 
                        <assessmentType>Coursework</assessmentType> 
                        <assessmentWeighting>40</assessmentWeighting> 
                    </assessment> 
                    <assessment> 
                        <assessmentName>Test2</assessmentName> 
                        <assessmentType>Coursework</assessmentType> 
                        <assessmentWeighting>30</assessmentWeighting>  
                    </assessment> 
                </assessmentDetails>
Het lukt mij niet om dit over meerdere UILabels uit te schrijven. Zie code:
Code:
TBXMLElement *assessment= [TBXML childElementNamed:@"assessmentName" parentElement:element]; 
        NSString *name = [TBXML textForElement:assessment]; 
        label.text = [NSString stringWithFormat:@"%@", name];
Bovenstaand lukt wel voor een enkel, maar als ik hier een tweede UILabel aan zet dan lukt het niet.

Kort: Ik wil met TBXML de drie 'assessmentName' schrijven naar UILabel.

Bedankt!
__________________
---- Med. iOS Developer ----
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 23 July 2012, 13:03
Nikooos's schermafbeelding
» iPhone 5 32GB (Zwart) [FW: 10.0.2]  [Jailbreak: Nee]
» iPad 2 Wi-Fi 16GB (Wit) [FW: 10.0.2]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 28 November 2007
Locatie: Tilburg
Berichten: 3.183
Standaard

Werkt bij mij echt heel fijn. Lekker snel en simpel, hoewel ik tegenwoordig liever JSON gebruik dan XML, maar soms is het niet anders en dan gebruik ik altijd TBXML.

In jouw geval werkt het voor slechts 1 element, omdat je natuurlijk een loopje moet maken. Je voert nu gewoon 1 keer die actie uit, terwijl er misschien wel meerdere elementen zijn.
  #3  
Oud 23 July 2012, 16:21
» iPhone 4 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 March 2008
Berichten: 95
Standaard

Do -> While?

Ik ben dat eens tegengekomen op google, maar zonder dat het wordt uitgeschreven naar een UILabel. Dat maakt het juist voor mij, voor nu, moeilijk. Ik ben serieus benieuwd naar een stukje code wat laat zien dat een ander UILabel het 2 element laat zien.

Ik wil dit graag, voor mijzelf vooral, werkend hebben om zo iets anders geleerd te hebben.

Dank voor de reactie

Citaat:
Oorspronkelijk geplaatst door psychonikeo Bekijk bericht
Werkt bij mij echt heel fijn. Lekker snel en simpel, hoewel ik tegenwoordig liever JSON gebruik dan XML, maar soms is het niet anders en dan gebruik ik altijd TBXML.

In jouw geval werkt het voor slechts 1 element, omdat je natuurlijk een loopje moet maken. Je voert nu gewoon 1 keer die actie uit, terwijl er misschien wel meerdere elementen zijn.
  #4  
Oud 24 July 2012, 09:03
Nikooos's schermafbeelding
» iPhone 5 32GB (Zwart) [FW: 10.0.2]  [Jailbreak: Nee]
» iPad 2 Wi-Fi 16GB (Wit) [FW: 10.0.2]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 28 November 2007
Locatie: Tilburg
Berichten: 3.183
Standaard

Het lijkt me sowieso niet handig om direct vanuit de parser in een label te gaan schrijven. Ik doen altijd eerst alle info ophalen, deze in een dictionary zetten en bij meerdere elementen gaat er per element een dictionary in een array.

Die array loop ik dan weer rond om alle informatie daar te zetten waar ik het wil hebben.

dit is mijn code om een RSS feed uit te lezen.

Code:
NSMutableArray *newsArr = [[NSMutableArray alloc] init];

TBXML *tbxml = [TBXML tbxmlWithURL:url];
    TBXMLElement *root = tbxml.rootXMLElement;
    if (root) {
        TBXMLElement *channelElement = [TBXML childElementNamed:@"channel" parentElement:root];
        if (channelElement != nil)   {
            //NSLog(@"channel");
            
            TBXMLElement *loopElement = [TBXML childElementNamed:@"item" parentElement:channelElement];
            if (loopElement != nil) {
                do {
                    NSMutableDictionary *newsDict = [[NSMutableDictionary alloc] initWithCapacity:4];
                    
                    //NSLog(@"nieuwsItem");
                    TBXMLElement *titleElement = [TBXML childElementNamed:@"title" parentElement:loopElement];
                    TBXMLElement *pubDateElement = [TBXML childElementNamed:@"pubDate" parentElement:loopElement];
                    TBXMLElement *contentElement = [TBXML childElementNamed:@"content:encoded" parentElement:loopElement];
                    TBXMLElement *linkElement = [TBXML childElementNamed:@"link" parentElement:loopElement];
                    TBXMLElement *imgElement = [TBXML childElementNamed:@"image" parentElement:loopElement];
                    
                    [newsDict setValue:[TBXML textForElement:titleElement] forKey:@"title"];
                    [newsDict setValue:[TBXML textForElement:pubDateElement] forKey:@"pubDate"];
                    [newsDict setValue:[TBXML textForElement:contentElement] forKey:@"content"];
                    [newsDict setValue:[TBXML textForElement:linkElement] forKey:@"link"];
                    [newsDict setValue:[TBXML textForElement:imgElement] forKey:@"image"];
                    
                    [newsArr addObject:newsDict];
                    
                } while ((loopElement = loopElement->nextSibling));
            }
        }
    }
Dan heb ik dus een array newsArr die gevuld is met een aantal dictionary's newsDict die alle informatie bevatten. Die kan ik dan gemakkelijk in een tabel laten weergeven.
Anders met een loopje de info in labels zetten.
  #5  
Oud 24 July 2012, 11:12
» iPhone 4 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 March 2008
Berichten: 95
Standaard

Ik heb hiervoor eens NSXMLParser gebruikt om ook het een en ander naar een paar uilabels te schrijven.

zie onderstaand code:
Code:
//cell-1
            if (counter == 0)
            {
                
                secondTempLabel.text = tempStrToDisp;
                
            }
            
            //cell-2
            if (counter == 1)
            {
                
                tirthTempLabel.text = tempStrToDisp;
            }
            
            //cell-3
            if (counter == 2)
            {
                
                fourthTempLabel.text = tempStrToDisp;
            }
            
            //increment
            //This will only get incremented 4 times
            counter = counter + 1;
Ik kan hieruit meer duidelijkheid trekken dan bij een TBXML. Hier geef ik per laag aan welke laag element ik in een UILabel wil zien. Dit is voor mij duidelijk taal.

Ik kan bij TBXML niet een soortgelijk functie vinden.

Wat ik wel kan met TBXML is dat ik de eerste laag wel kan parsen. Zie code:
Code:
records = [NSMutableArray array];
    [records retain];
    
    TBXML * XML = [[TBXML tbxmlWithURL:[NSURL URLWithString:@"#########.XML"]] retain];
    
    TBXMLElement *rootXML = XML.rootXMLElement;
    TBXMLElement *results = [TBXML childElementNamed:@"kaas" parentElement:rootXML];  
    TBXMLElement *WOEID = [TBXML childElementNamed:@"kilo" parentElement:results]; 
    NSString *woeid = [TBXML textForElement:WOEID];
    
    
    [records addObject:[NSArray arrayWithObjects:
                        [TBXML textForElement:WOEID],nil]];  
    
    tirthTempLabel.text = woeid;
  #6  
Oud 24 July 2012, 23:24
» iPhone 4 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 March 2008
Berichten: 95
Standaard

Even een update. Ik heb iets gevonden om een aantal elementen te kunnen tonen in verschillende UILabels. Zie code.

Code:
TBXMLElement *element = [TBXML childElementNamed:@"####" parentElement:root];
    
    int count = 1;
    while (element != nil) {
        
        if (count == 1) {
            TBXMLElement *tempE = [TBXML childElementNamed:@"####" element];
            
            records = [NSMutableArray array];
            [records retain];
            
            [records addObject:[NSArray arrayWithObjects:
                                [TBXML textForElement:tempE],nil]]; 
            
            NSString *tempe = [TBXML textForElement:tempE];
            
            secondTempLabel.text = tempe;
        }
        if (count == 2) {
            TBXMLElement *tempB = [TBXML childElementNamed:@"####" element];
            
            records = [NSMutableArray array];
            [records retain];
            
            [records addObject:[NSArray arrayWithObjects:
                                [TBXML textForElement:tempB],nil]]; 
            
            NSString *tempb = [TBXML textForElement:tempB];
            
            tirthTempLabel.text = tempb;
        }
        
        weatherElement = [TBXML nextSiblingNamed:@"####" element];
        count++;
    }
Dit werkt voor mij uitstekend! Graag reacties of opmerkingen. Andere tips?
  #7  
Oud 24 July 2012, 23:34
XIII's schermafbeelding
iPhone(club) Guru
» iPhone X 256GB (Spacegrijs) [FW: 11.4]  [Jailbreak: Nee]
» iPad Pro 10,5 Wi-Fi + 4G 256GB (Spacegrijs) [FW: 11.4]  [Jailbreak: Nee]
» Windows
 
Geregistreerd: 1 July 2009
Berichten: 10.004
Standaard

Een flauwe: het Nederlandse "derde" spel je in het Engels "third", niet "tirth"...
__________________
We are one, but we are not the same... Talk to each other!
  #8  
Oud 24 July 2012, 23:46
» iPhone 4 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 March 2008
Berichten: 95
Standaard

Thanks, ik heb het aangepast! Kan gebeuren.

Citaat:
Oorspronkelijk geplaatst door XIII Bekijk bericht
Een flauwe: het Nederlandse "derde" spel je in het Engels "third", niet "tirth"...
  #9  
Oud 26 July 2012, 13:12
» iPhone 4 16GB (Zwart) [FW: 5.1.1]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Wit) [FW: 5.1.1]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 19 March 2008
Berichten: 95
Standaard

JSON? Hoe gebruik je het? Wat is je ervaring.

Kan je het meer toelichten..


Citaat:
Oorspronkelijk geplaatst door psychonikeo Bekijk bericht
Werkt bij mij echt heel fijn. Lekker snel en simpel, hoewel ik tegenwoordig liever JSON gebruik dan XML, maar soms is het niet anders en dan gebruik ik altijd TBXML.

In jouw geval werkt het voor slechts 1 element, omdat je natuurlijk een loopje moet maken. Je voert nu gewoon 1 keer die actie uit, terwijl er misschien wel meerdere elementen zijn.
Reageren


Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 
Discussietools
Weergave

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
Itunes reviews parser Dreissen Ontwikkelen voor iOS 2 12 April 2011 09:20
XML Parser Dreissen Ontwikkelen voor iOS 5 17 November 2010 15:24
Ervaring cases wouter2190 Archief 2 13 August 2010 07:05
ervaring henkenmirella Archief 1 19 August 2009 19:44
XML parser het lukt niet helemaal Dreissen Ontwikkelen voor iOS 17 25 May 2009 15:53

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 02:30.