我在项目中遇到了包括TBXML的问题。

  • guide告诉我包括四个文件,TBXML.hTBXML.mNSDataAdditions.hNSDataAdditions.m,但是在the Github repo中找不到后两个文件。
  • 我尝试运行示例项目TBXML-Books,希望复制如何将TBXML导入到项目中,但是它也无法在Xcode 5中成功构建。找不到libTBXML-iOS.a

  • 有人帮忙吗?提前致谢。

    最佳答案

    将TBXML包含到您的项目中

  • the Github repo获取TBXML.hTBXML.m并将它们添加到您的项目中。这两个是您唯一需要的文件。
  • 在项目的“目标”>“构建阶段”中,将编译器标志-fno-objc-arc添加到TBXML.m中。

  • 加载XML文档
    TBXML *sourceXML = [[TBXML alloc] initWithXMLFile:@"dictionary.xml" error:nil];
    

    您可以将alloc-init与其他init实例方法一起使用,也可以使用类方法样式(我不包括不赞成使用的方法):
    - (id)initWithXMLString:(NSString*)aXMLString error:(NSError **)error;
    - (id)initWithXMLData:(NSData*)aData error:(NSError **)error;
    - (id)initWithXMLFile:(NSString*)aXMLFile error:(NSError **)error;
    - (id)initWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension error:(NSError **)error;
    
    + (id)newTBXMLWithXMLString:(NSString*)aXMLString error:(NSError **)error;
    + (id)newTBXMLWithXMLData:(NSData*)aData error:(NSError **)error;
    + (id)newTBXMLWithXMLFile:(NSString*)aXMLFile error:(NSError **)error;
    + (id)newTBXMLWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension error:(NSError **)error;
    

    样本XML结构
    <dictionary>
        <entry id="">
            <text></text>
        </entry>
    
        <entry id="">
            <text></text>
        </entry>
    </dictionary>
    

    提取元素
    TBXMLElement *rootElement = sourceXML.rootXMLElement;
    TBXMLElement *entryElement = [TBXML childElementNamed:@"entry" parentElement:rootElement];
    

    提取属性
    NSString *id = [TBXML valueOfAttributeNamed:@"id" forElement:entryElement];
    

    提取元素文字
    TBXMLElement *textElement = [TBXML childElementNamed:@"text" parentElement:entryElement];
    NSString *text = [TBXML textForElement:textElement];
    

    遍历未知元素/属性

    如果我想打印出每个<text>内每个<entry>元素内的文本,这就是我要做的:
    TBXML *sourceXML = [[TBXML alloc] initWithXMLFile:@"dictionary.xml" error:nil];
    TBXMLElement *rootElement = sourceXML.rootXMLElement;
    TBXMLElement *entryElement = [TBXML childElementNamed:@"entry" parentElement:rootElement];
    
    do {
        TBXMLElement *textElement = [TBXML childElementNamed:@"text" parentElement:entryElement];
        NSString *word = [TBXML textForElement:textElement];
        NSLog(@"%@", word);
    } while ((entryElement = entryElement->nextSibling) != nil);
    

    我还没有亲自尝试遍历属性,但是我想您可以执行类似entryElement->firstAttribute的操作,如the old guide所示。您也可以只查看TBXML.h来了解如何进行操作。

    关于ios - 更新的TBXML指南:如何在iOS 7的Xcode 5中包含TBXML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19277203/

    10-08 21:50