Выбор правильного парсера XML IOS
Есть миллион различных синтаксических анализаторов XML для iPhone. У меня есть 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. И знаю, является ли автор блога автором комментария.
Ответы
Ответ 1
Лучшее сравнение, которое я видел по этому вопросу:
http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project
Разница между самыми медленными и быстрыми синтаксическими анализаторами в его случае была в 2 раза. В зависимости от ваших требований к функциям есть определенные парсеры, которые могут сократить время разбора пополам.
Ответ 2
Отъезд 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);
}
}];
UPDATE: RaptureXML теперь поддерживает XPath!
Ответ 3
Вы должны посмотреть на эти библиотеки, чтобы:)
У Ono есть классный AFOnoResponseSerializer, который можно интегрировать с AFNetworking
Ответ 4
Я сделал этот новый простой и легкий анализатор XML для iOS в Swift - 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
Я надеюсь, что это будет полезно для кого-то.
Ответ 5
Поскольку у вас есть требование для XML среднего размера
TinyXML может быть хорошим выбором для документов среднего размера, если у вас уже есть опыт работы с API и они удобны с C, поскольку он довольно легко переносится на iPhone.
Для получения дополнительной информации вы можете перейти по этой ссылке
Ответ 6
Я бы порекомендовал легкий XML-парсер под названием "CDXMLKit". Вы можете найти его на http://www.cdframeworks.com/product/cdxmlkit, и он действительно прост в использовании.
Вот пример кода из синтаксического анализатора:
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);
}