选择正确的IOS XML解析器

时间:2010-11-15 05:36:31

标签: ios xml parsing sdk

iPhone有一百万种不同的XML解析器。我有一个中等大小的XML文件,其中包含许多重复标记(在层次结构中的不同点)。我在考虑TBXML,但我担心它缺乏XPath支持。例如,假设我的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。并且知道博客作者是否是评论作者。

5 个答案:

答案 0 :(得分:52)

我在这个问题上看到的最佳比较:

http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

在他的情况下,最慢和最快的解析器之间的差异是2倍。根据您的功能要求,肯定有解析器可以将解析时间缩短一半。

答案 1 :(得分:31)

结帐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!

答案 2 :(得分:4)

您应该按顺序查看这些库:)

  1. Ono,由libxml2提供支持
  2. XMLDictionary
  3. RaptureXML
  4. Ono拥有可以与AFNetworking集成的酷AFOnoResponseSerializer

答案 3 :(得分:1)

我在Swift中为iOS创建了这个新的简单轻量级XML解析器 - AEXML

您可以使用它来读取这样的XML数据:

let someValue = xmlDocument["element"]["child"]["anotherChild"].value

或者您可以使用它来构建这样的XML字符串:

let document = AEXMLDocument()
let element = document.addChild("element")
element.addChild("child")
document.xmlString // returns XML string of the entire document structure

我希望它对某人有用。

答案 4 :(得分:0)

因为您需要中等大小的XML

如果您已经熟悉API并且对C很熟悉,TinyXML可能是中型文档的不错选择,因为它很容易移植到iPhone上。

For More information you can go through this link