更新的TBXML指南:如何在Xcode 5中包含TBXML,适用于iOS 7

时间:2013-10-09 16:09:33

标签: ios objective-c xml xcode tbxml

我的项目中遇到TBXML问题。

  1. guide告诉我要包含四个文件TBXML.hTBXML.mNSDataAdditions.hNSDataAdditions.m,但后两者无处可去可以在the Github repo找到。

  2. 我尝试运行示例项目TBXML-Books,希望复制TBXML导入项目的方式,但它也不能在Xcode 5中成功构建。找不到libTBXML-iOS.a

  3. 有人帮忙吗?提前谢谢。

2 个答案:

答案 0 :(得分:7)

将TBXML包含在您的项目中

  1. the Github repo获取TBXML.hTBXML.m并将其添加到您的项目中。这两个是你需要的唯一文件。

  2. 在您的项目的目标>构建阶段,将编译器标志-fno-objc-arc添加到TBXML.m

  3. 加载XML文档

    TBXML *sourceXML = [[TBXML alloc] initWithXMLFile:@"dictionary.xml" error:nil];
    

    您可以使用其他init实例方法alloc-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了解如何进行操作。

答案 1 :(得分:2)

如果您还没有使用cocoapods,我建议使用。

http://cocoapods.org/?q=tbxml