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

Mat*_*ros 2 xml xcode objective-c ios tbxml

我在项目中遇到包括TBXML在内的问题.

  1. 该指南告诉我有四个文件,TBXML.h,TBXML.m,NSDataAdditions.h,和NSDataAdditions.m,但后两者都无处可寻GitHub的回购.

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

有人帮忙吗?提前致谢.

Mat*_*ros 7

将TBXML包含在您的项目中

  1. 从Github回购获取TBXML.h并将其添加到您的项目中.这两个是你需要的唯一文件.TBXML.m

  2. 在项目的Target> Build Phases中,将编译器标志添加-fno-objc-arc到TBXML.m.

加载XML文档

TBXML *sourceXML = [[TBXML alloc] initWithXMLFile:@"dictionary.xml" error:nil];
Run Code Online (Sandbox Code Playgroud)

您可以使用其他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;
Run Code Online (Sandbox Code Playgroud)

示例XML结构

<dictionary>
    <entry id="">
        <text></text>
    </entry>

    <entry id="">
        <text></text>
    </entry>
</dictionary>
Run Code Online (Sandbox Code Playgroud)

提取元素

TBXMLElement *rootElement = sourceXML.rootXMLElement;
TBXMLElement *entryElement = [TBXML childElementNamed:@"entry" parentElement:rootElement];
Run Code Online (Sandbox Code Playgroud)

提取属性

NSString *id = [TBXML valueOfAttributeNamed:@"id" forElement:entryElement];
Run Code Online (Sandbox Code Playgroud)

提取元素文本

TBXMLElement *textElement = [TBXML childElementNamed:@"text" parentElement:entryElement];
NSString *text = [TBXML textForElement:textElement];
Run Code Online (Sandbox Code Playgroud)

遍历未知元素/属性

如果我想打印出每个<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);
Run Code Online (Sandbox Code Playgroud)

我没有亲自尝试遍历这些属性,但我认为你可以做一些类似的事情entryElement->firstAttribute,如旧指南中所示.你也可以看看TBXML.h如何去做.