Reputation: 881
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
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