web-dev-qa-db-fra.com

Choisir le bon IOS analyseur XML

Il existe un million d'analyseurs XML différents pour l'iPhone. J'ai un fichier XML de taille moyenne qui contient beaucoup de balises en double (à différents points de la hiérarchie). Je pensais à TBXML mais j'étais préoccupé par son manque de support XPath. Par exemple, disons que mon fichier XML ressemblait à ceci.

<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>

Fondamentalement, mes exigences sont que je dois pouvoir extraire ce cdata. Et sachez si c'est l'auteur du blog un auteur de commentaires.

40
endy

Meilleure comparaison que j'ai vue sur le sujet:

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

La différence entre les analyseurs les plus lents et les plus rapides dans son cas était un facteur de 2. Selon vos besoins en fonctionnalités, il existe certainement des analyseurs qui peuvent réduire de moitié votre temps d'analyse.

52
Daniel Amitay

Découvrez RaptureXML . Ce n'est pas un comportement XPath officiel, mais c'est assez proche. Votre requête serait:

[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);
    }
}];

MISE À JOUR: RaptureXML prend désormais en charge XPath!

31
ZaBlanc

Vous devriez regarder ces bibliothèques, dans l'ordre :)

  1. Ono , propulsé par libxml2
  2. XMLDictionary
  3. RaptureXML

Ono a le cool AFOnoResponseSerializer qui peut être intégré à AFNetworking

4
onmyway133

J'ai créé ce nouvel analyseur XML simple et léger pour iOS dans Swift - AEXML

Vous pouvez l'utiliser pour lire des données XML comme ceci:

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

ou vous pouvez l'utiliser pour créer une chaîne XML comme ceci:

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

J'espère que ce sera utile pour quelqu'un.

1
tadija

Comme vous avez besoin de XML de taille moyenne

TinyXML pourrait être un bon choix pour les documents de taille moyenne si vous avez déjà de l'expérience avec l'API et êtes à l'aise avec C car il se connecte assez facilement à l'iPhone.

Pour plus d'informations, vous pouvez passer par ce lien

0
Shan