iPhone xml parsing/editing a better solution? - iphone

I use GDataXML for parsing the XML I received from my webservice, actually I only parse the part that I need and then I want to "edit" that XML and send it back to Webservice.
I checked some GDataXML examples but they were about saving XML as model objects and creating an XML from model objects again.
Because speed is important what I want is without saving or converting that xml into model objects I just want to edit/delete some nodes on it and send it back quickly as possible.
Actually I can do this by simply converting it into string and do string manipulation. But I dont think editing XML as a string is a safe way.
How can I do this better?
Thanks

I tend to use a XML to NSDictionary object that I found on google which saves a lot of time parsing and configuring the XML. Try that out.

Related

Parsing large quantities of JSON data in iOS

I'm getting a large JSON string (11MB) from a web service. When I parse the data using JSONKit, my app reaches 70MB, I get memory warnings, and the app crashes.
How can I parse this data?
the easiest solution is reducing the json size you are getting from the server. If you cant to it, the only way to parse huge JSON is using lazy evaluation.
I dont think there is a JSON lib for objective-c that supports lazy evaluation. however you can implement one.
Your best bet is to look at the YAJL JSON parser, that supports event driven parsing. Then you can parse the JSON as it comes down in a data feed, and not have to store the whole thing in memory at once.
https://github.com/gabriel/yajl-objc
Sorry, I don't know of any code examples that demonstrate this use in practice.
SBJson supports parsing a stream of data. This lets your process your document bit by bit so you don't need to hold on to the entire document. The distribution contains two examples of how to use this. First there's the StreamParserIntegrationTest.m and next there's the TweetStream demo app: a twitter application that will sit and parse a HTTP stream all day (if you let it) displaying each tweet as they come in and then throw them away.
(Disclaimer: I am SBJson's author.)
11 mb is a largedata and solution is only to minimise your size of data
JSON support is not native to iOS, but there is a great framework for this exact purpose: http://code.google.com/p/json-framework/
This framework supports conversion from raw JSON objects to Objective-C objects (NSArray, NSDictionary) and vice versa.

iPhone : Which parsing method is best to use?

i want to know which parsing method is best to use among
Simple XML parsing
JSON Parsing.
i am new to iPhone programming...thats why i want to know
what is the advantages of JSON parsing ?
when to use JSON Parsing ?
thanking in advance...
Since you are asking about which parsing method to use, the answer would simply be "one that match your data". JSON and XML does not use the same schemas, so you would not be able to choose freely.
On the other hand if you are actually asking which data format to use, then I'll suggest having a look at this post.

XML Processing on iPhone: What is the best option?

Im building a new version of an iPhone application and Im wondering if I should review how my app communicates with the server.
My iPhone client sends and receives XML over HTTP requests.
To send the information I use ASIHTTPRequest framework. I "manually" build the XML request by appending strings.
To parse the response Im using a NSXMLParser.
My question is if I have better options to
A) Create an XML string from a memory object.
B) Create a memory object from the XML string.
Is there anything like JAXB to marshal XML into object?
Thanks
Gonso
Have a look TouchXml
http://code.google.com/p/touchcode/wiki/TouchXML
I'm not entirely sure if this would work for you, but you could try using JSON along with a JSON parser such as SBJSON, which will create an object in memory for you based on the data.
To get JSON from an XML feed, I believe you could send the request for XML to YQL(http://developer.yahoo.com/yql) which can then translate the feed into JSON before sending it back.
Parsing XML
I cant think of something that looks for tags and parses things directly into objects (for XML), but a standard line-by line parser does the job. It does require a lot of code to use NSXMLParser, so just set up an external class to do it. It doesn't take that long, and is easy to cancel [parser abortParsing]
I basically used a model in which it starts a parent element, gets the the data from detail elements and then when the parent element closes, the parser takes the temporary data, fills an object with it, and adds the object to an array. It then repeats the process. I don't think my way would be very effective if you had more that 3 levels of XML (root==>parent tags==>details tags within parents), but it works for me. If you have complex XML, I would find some way to switch over to JSON and use SBJSON like Matt.M suggested.
Creating XML
If I were creating XML, I would just use a bunch of for loops and one big NSMutableString.

Saving and Editing JSON on iPhone/iPod

What's the best method for editing and saving a JSON file on the iPhone/iPod? I know there are libraries that allow you to easily read JSON data, but are there any that allow you to generate it?
TouchJSON reads and generates JSON, is quite fast, and uses very little memory.
JSON Framework is supposedly faster, but uses much more memory.
The iPhone also includes a built-in JSON parser/generator, but it's only available through private APIs. You probably shouldn't use this one.
TouchJSON allows conversion both to and from JSON with a single call like:
[[CJSONSerializer serializer] serializeObject:someDictionaryofYours];

Is there an easy way to work with web services for iPhone dev?

We want to take XML data and convert it to an NSDictionary object, but we don't want to manually iterate over the XML. Is there an easy way to do this? How are you doing web services for your iPhone app?
If you have control over the XML output you could try creating a property list which you can then read into a dictionary using -dictionaryWithContentsOfURL: (though the better asynchronous way would be to get the data using an NSURLConnection and then converting the data using the -propertyList method on NSString). You can find more about property lists here: http://developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/Introduction/chapter_1_section_1.html
Of course the best solution is to use a RESTful client and use a combination of NSURLConnection to get/send the data and the TouchXML classes (http://code.google.com/p/touchcode/wiki/TouchXML) to parse the data, though this would require more work to put the data into a dictionary. Of course if these are going to be the main data objects in your system you really want to be using either a custom class or SQLite to store the data as it provides you much more reliability in testing your app than a dictionary.
If you can control the server output, try using plists. Otherwise you're stuck with parsing XML (or JSON if the server can do that), but there are frameworks you can use. See the answer to this question.
Also, here is a good overview of how to do RESTful clients on the iphone:
https://developer.apple.com/webapps/articles/creatingrestfulclients.html
You can return the data in JSON format. There are many open-source JSON parsers available for the iPhone (TouchJSON being one).
There's another class available called NSPropertyListSerialization which gets you a dictionary from data.
You can do something like this with the data you receive
NSDictionary* propertyList;
NSPropertyListFormat format;
NSString *errorStr;
propertyList = [NSPropertyListSerialization
propertyListFromData:receivedData
mutabilityOption: NSPropertyListImmutable
format: &format
errorDescription: &errorStr];
Sorry, don't know what tags are used here for formatting code!