问题
There are a million different XML parsers for the iPhone. I have a medium sized XML file that contains alot of duplicate tags (at different points in the hierarchy). I was thinking about TBXML but I was concerned about its lack of XPath support. For instance lets say my XML file looked like this.
<blog>
<author> foo1 </author>
<comments>
<comment>
<text>
<![CDATA[ HTML code that must be extracted ]]>
</text>
<author>foo2</author>
</comment>
<comment>
<text>
<![CDATA[ Here is another post ]]>
</text>
<author>foo1</author>
</comment>
</comments>
</blog>
Basically my requirements are that I need to be able to extract that cdata. And know whether it is the blog author a comment author.
回答1:
Best comparison I've seen on the subject:
http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project
The difference between the slowest and fastest parsers in his case was a factor of 2. Depending on your feature requirements, there are definitely parsers that can cut your parsing time in half.
回答2:
Check out RaptureXML. It's not official XPath behavior, but it's pretty close. Your query would be:
[rxml iterate:@"comments.comment" with: ^(RXMLElement *e) {
if ([[e child:@"author"].text isEqualToString:@"foo1"]) {
NSLog(@"Blog Text is %@.", e.text);
} else {
NSLog(@"Comment Text is %@.", e.text);
}
}];
UPDATE: RaptureXML now supports XPath!
回答3:
You should look at these libraries, in order :)
- Ono, powered by libxml2
- XMLDictionary
- RaptureXML
Ono has the the cool AFOnoResponseSerializer which can be integrated with AFNetworking
回答4:
I made this new simple and lightweight XML parser for iOS in Swift - AEXML
You can use it to read XML data like this:
let someValue = xmlDocument["element"]["child"]["anotherChild"].value
or you can use it to build XML string like this:
let document = AEXMLDocument()
let element = document.addChild("element")
element.addChild("child")
document.xmlString // returns XML string of the entire document structure
I hope it will be useful for someone.
回答5:
As you have requirement for medium sized XML
TinyXML could be an good choice for medium sized documents if you already have experience with the API and are comfortable with C as it ports quite easily over to the iPhone.
For More information you can go through this link
来源:https://stackoverflow.com/questions/4181690/choosing-the-right-ios-xml-parser