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。并且知道博客作者是否是评论作者。
答案 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)
您应该按顺序查看这些库:)
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上。