Подтвердить что ты не робот

Выбор правильного парсера 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. И знаю, является ли автор блога автором комментария.

4b9b3361

Ответ 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);
}