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!

你应该看看这些库,为了:)

  1. 小野 ,由libxml2提供支持
  2. XMLDictionary
  3. 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); }