【问题标题】:How do I parse an NSString containing XML in Objective-C?如何在 Objective-C 中解析包含 XML 的 NSString?
【发布时间】:2010-10-29 18:59:52
【问题描述】:

在我的 iPhone 应用程序中,我有以下 NSString:

NSString *myxml=@"<students>
    <student><name>Raju</name><age>25</age><address>abcd</address> 
    </student></students>";

如何解析这个字符串的 XML 内容?

【问题讨论】:

    标签: iphone objective-c xml


    【解决方案1】:

    下载: https://github.com/bcaccinolo/XML-to-NSDictionary

    然后你只需这样做:

    NSDictionary *dic = [XMLReader dictionaryForXMLString:myxml error:nil];
    

    Result 是一个 NSDictionary *dic,其中包含字典、数组和字符串,具体取决于 XML:

    {
        students =     {
            student =         {
                address = abcd;
                age = 25;
                name = Raju;
            };
        };
    }
    

    【讨论】:

    【解决方案2】:

    你应该使用 NSXMLParser 类

    这是该类文档的链接: http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html

    您的代码应如下所示:

    @implementation MyClass
    - (void)startParsing {
        NSData *xmlData = (Get XML as NSData)
        NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease];
        [parser setDelegate:self];
        [parser parse];
    }
    
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
        NSLog(@"Started %@", elementName);
    }
    

    【讨论】:

    • 我发现 google 客户端库附带的 xml 解析器更容易使用:code.google.com/p/gdata-objectivec-client
    • 您需要使用其他 NSXMLParserDelegate 方法来处理传入的文本。我对 API 不够熟悉,无法准确告诉您该做什么,但是 -parser:foundCharacters:看起来是正确的方法。对于单个文本元素,它可能会被多次调用。
    【解决方案3】:

    另一个答案是:不要使用 XML。改用 plist,它是使用 XML 编写的,但在 Objective-C 中更容易解析为不同的数据类型(例如,NSArray 具有将文件或 NSData plist 转换为 NSArray 的方法)。

    【讨论】:

      【解决方案4】:

      就像@Jon Hess 提到的,只需为 NSXMLParserDelegate 的“可选”方法创建一个包装类。这些方法可帮助您分离在解析 xml 时可能会发现有用的任务。

      我发现的一个非常好的在线期刊文件是Elegant XML parsing with Objective-C。 Phil Nash 确实花时间展示了您可以访问的解析选项的基础知识。它可以让新程序员指导他/她完成整个设置。

      加载 xml 可以是 @Jon Hess 方法的修改。

      您可以设置:

      -(void)parser:(NSXMLParser *)parser 
      didStartElement:(NSString *)elementName 
       namespaceURI:(NSString *)namespaceURI 
      qualifiedName:(NSString *)qName 
         attributes:(NSDictionary *)attributeDict{
      }
      

      处理某些元素上的事件。

      同时实现:

      -(void)parser:(NSXMLParser *)parser 
      foundCharacters:(NSString *)string {
      }
      

      将找到的字符串放入对象集合中。

      【讨论】:

        【解决方案5】:

        我认为 XMLDocument 的最佳等价物是AbacigilXQ Library。你应该看看它。我正在使用它。

        http://code.google.com/p/abacigilxq-library/

        【讨论】:

        • 问题中没有提到 XMLDocument,那么为什么是等价的呢? AbacigilXQ 不是用于与 Web 服务通信吗?哪里提到的?
        猜你喜欢
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 2011-10-10
        • 1970-01-01
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        相关资源
        最近更新 更多