dogwasstar
dogwasstar

Reputation: 881

TBXML and child elements

I know there are lot of questions regarding TBXML out there and I have tried few of the solutions but nothing is working for me. I am new to this stuff.

<?xml version="1.0" encoding="utf-8"?>
  <ArrayOfNewsFeedService xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
    <NewsFeedService>
      <LngNewsItemID>1</LngNewsItemID>
        <Contents>test</Contents>
        <LngUserID>1</LngUserID>
        <DteCreated>1/04/2014 12:00:00 a.m.</DteCreated>
        <NewsReply>
           <NewsFeedReplyService>
              <lngNewsItemReplyID />
              <LngNewsItemID>1</LngNewsItemID>
              <ReplyContent>reply</ReplyContent>
              <LngUserID>1</LngUserID>
              <DteCreated>1/04/2014 12:00:00 a.m.</DteCreated>
           </NewsFeedReplyService>
          <NewsFeedReplyService>
              <lngNewsItemReplyID />
              <LngNewsItemID>1</LngNewsItemID>
              <ReplyContent>reply2</ReplyContent>
              <LngUserID>1</LngUserID>
              <DteCreated>1/04/2014 12:00:00 a.m.</DteCreated>
          </NewsFeedReplyService>
        </NewsReply>
     </NewsFeedService>
   </ArrayOfNewsFeedService>

I can read the 'Contents' value from the xml just fine but I am running into problems when I try to read the 'NewsReply' and all the inner xml. Not really sure how to solve it. Any help would be greatly appreciated. I have been trying to solve this for over 2 weeks now.

Thanks in advance

EDIT - Apologies here is the code of what I have tried.

NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];



NSLog(@"%@", theXML);

TBXML * tbxml = [TBXML newTBXMLWithXMLString:theXML];



NSLog(@"%@", [TBXML elementName:tbxml.rootXMLElement]);





if (tbxml.rootXMLElement)

{



    NSString *content = [self traverseElement:tbxml.rootXMLElement: @"Contents"];



    UITextViewPost.text = content;



    NSString *test = [self traverseElement:tbxml.rootXMLElement: @"NewsReply"];

    NSLog(@"ReplyContent - %@", test);



    TBXMLElement * elem_items = [TBXML childElementNamed:@"NewsFeedReplyService" parentElement:tbxml.rootXMLElement];



    NSLog(@"elem_items - %@", elem_items);



    NSMutableArray * array=[[NSMutableArray alloc]init];



    while (elem_items !=nil)

    {

        NSMutableDictionary * dictionary=[[NSMutableDictionary alloc]init];

        NSString * str_ParseData=[[NSString alloc]init];



        TBXMLElement * elem_item = [TBXML childElementNamed:@"NewsFeedReplyService" parentElement:elem_items];



        TBXMLElement * elem_itemid = [TBXML childElementNamed:@"LngUserID" parentElement:elem_item];

        str_ParseData = [TBXML textForElement:elem_itemid];

        [dictionary setObject:str_ParseData forKey:@"LngUserID"];



        TBXMLElement * elem_itemname = [TBXML childElementNamed:@"ReplyContent" parentElement:elem_item];

        str_ParseData = [TBXML textForElement:elem_itemname];

        [dictionary setObject:str_ParseData forKey:@"ReplyContent"];



        [array addObject:dictionary];

        elem_items = [TBXML nextSiblingNamed:@"NewsFeedReplyService" searchFromElement:elem_items];  /// end node



        NSLog(@"printing arrays - %@", str_ParseData);

    }

}

Upvotes: 1

Views: 181

Answers (1)

dogwasstar
dogwasstar

Reputation: 881

I have fixed it. I used the following code if anyone wants to fix their issue.

- (void) traverseElement:(TBXMLElement *)element {
do {
    if (element->firstChild) 
        [self traverseElement:element->firstChild];

    if ([[TBXML elementName:element] isEqualToString:@"Record"]) {
        TBXMLElement *destination = [TBXML childElementNamed:@"Destination" parentElement:element];
        TBXMLElement *status = [TBXML childElementNamed:@"Status" parentElement:element];
        TBXMLElement *guid = [TBXML childElementNamed:@"GUID" parentElement:element];
        TBXMLElement *dateSub = [TBXML childElementNamed:@"DateSubmitted" parentElement:element];
        TBXMLElement *dateToSend = [TBXML childElementNamed:@"DateToSend" parentElement:element];
        TBXMLElement *dateSent = [TBXML childElementNamed:@"DateSent" parentElement:element];
        TBXMLElement *dateReceived = [TBXML childElementNamed:@"DateReceived" parentElement:element];
        TBXMLElement *message = [TBXML childElementNamed:@"Message" parentElement:element];
        TBXMLElement *id = [TBXML childElementNamed:@"ID" parentElement:element];

        [records addObject:[NSArray arrayWithObjects:
                              [TBXML textForElement:destination],
                              [TBXML textForElement:status],
                              [TBXML textForElement:guid],
                              [TBXML textForElement:dateSub],
                              [TBXML textForElement:dateToSend],
                              [TBXML textForElement:dateSent],
                              [TBXML textForElement:dateReceived],
                              [TBXML textForElement:message],
                              [TBXML textForElement:id],nil]];  
    }
} while ((element = element->nextSibling));}

After that just call the function from with in your code to populate an array.

Also make sure you change the fields name from the one I have posted above.

Thanks

Upvotes: 0

Related Questions