select正确的IOS XMLparsing器
有一百万个不同的XMLparsing器为iPhone。 我有一个中等大小的XML文件,其中包含许多重复的标签(在层次结构的不同点)。 我正在考虑TBXML,但是我担心它缺lessXPath支持。 例如让我说我的XML文件看起来像这样。
<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>
基本上我的要求是,我需要能够提取该cdata。 并知道是否是博客作者评论作者。
我在这个问题上看到的最好的比较:
http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project
在他的案例中最慢和最快的parsing器之间的差异是2倍。根据您的function要求,肯定有parsing器,可以减less一半的parsing时间。
看看RaptureXML 。 这不是官方的XPath行为,但它非常接近。 您的查询将是:
[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); } }];
更新:RaptureXML现在支持XPath!
你应该看看这些库,为了:)
- 小野 ,由libxml2提供支持
- XMLDictionary
- RaptureXML
小野有一个很酷的AFOnoResponseSerializer可以与AFNetworking集成
我在Swift – AEXML中为iOS创build了这个新的简单轻量级XMLparsing器
你可以用它来读取这样的XML数据:
let someValue = xmlDocument["element"]["child"]["anotherChild"].value
或者你可以使用它来像这样构buildXMLstring:
let document = AEXMLDocument() let element = document.addChild("element") element.addChild("child") document.xmlString // returns XML string of the entire document structure
我希望这对某个人有用。
正如你对中等大小的XML的需求
如果你已经有了API的经验,TinyXML对于中等规模的文档来说可能是一个不错的select,并且可以很轻松地转移到iPhone上,因此适合使用C语言。
欲了解更多信息,你可以通过这个链接
我会推荐一个名为“CDXMLKit”的轻量级XMLparsing器。 你可以在http://www.cdframeworks.com/product/cdxmlkit上find它,它非常易于使用。;
以下是parsing器的一些示例代码:
CDXMLDocument * document = [[CDXMLDocument alloc] initWithXMLURL:@"--url--"]; CDXMLNode * blog = [[document childrenWithName:@"blog"] firstObject]; NSString * blogAuthor = [[[blog childrenWithName:@"author"] firstObject] innerContent]; CDXMLNode * comments = [[blog childrenWithName:@"comments"] firstObject]; for(CDXMLNode * commentNode in comments.children) { NSString * commentAuthor = [[[commentNode childrenWithName:@"author"] firstObject] innerContent]; NSString * commentText = [[[commentNode childrenWithName:@"text"] firstObject] innerContent]; NSLog(@"%@: %@", commentAuthor, commentText); }