【问题标题】:Which is the suitable XML parser in iOS?哪个是 iOS 中合适的 XML 解析器?
【发布时间】:2012-03-18 08:04:14
【问题描述】:

我想解析下面的xml文件,

哪个是最好的 xml 解析器 iOS。我想像 SBJON 库一样解析它,我的意思是我想动态解析它。例如,将所有 POSITION_DATA 元素数据存储在 NSMutableDictionary 中,并且该字典应存储在 NSMutableArray 中。

如果使用 SBJON 库,那么我将获取包含 XML 文件的所有数据的第一个数组,然后我将从数组中提取适当的数据。

我可以在 iOS 中使用 Objective-C 做这样的事情吗?我已经使用了 TBXML 库,但我认为它不适合给定的 xml 文件格式。我也使用 TouchXML 库,但它给了我编译时错误“touchxml library and getting an error libxml/tree.h no such file or directory”。

如何解决这个解析问题?

【问题讨论】:

  • 可能值得将您的 TouchXML 问题作为一个单独的、不同的问题发布。 StackOverflow 最适合解决有明确答案的简单问题,因此这是确保您可以尝试该选项的最佳方式。
  • 您找到适合您的答案了吗?
  • @psoft,请参阅下面接受的答案,由我给出。

标签: iphone objective-c ios ipad xml-parsing


【解决方案1】:

NSXMLParser 是标准的 XML 解析工具。

【讨论】:

    【解决方案2】:

    在这里你有简单而伟大的XML Parser to NSDictionary

    【讨论】:

      【解决方案3】:

      我还建议阅读有关 GDataXML 的内容。这很容易而且非常快。这里有更多关于how-to-read-and-write-xml-documents-with-gdataxml的信息。

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        https://github.com/TouchCode/TouchXML

        你以后会感谢我的。我受不了 NSXMLParser。

        编辑:确保遵循下载的 Docs 文件夹中包含的安装说明。将向您展示如何摆脱 lib xml 错误。

        【讨论】:

        • +1 用于建议替代方案,但您能否评论一下为什么您更喜欢 TouchXML 而不是 NSXMLParser?
        • 更多的是肥皂盒意见之类的东西,但我讨厌我必须使用一系列 if 语句和 iVar 创建一堆委托方法来跟踪状态。使用 TouchXML 之类的东西,我可以从 XML 字符串创建文档,从 Xpath 中获取我需要的元素并获取它的字符串值或子元素。更容易阅读和理解,尤其是对于未来从事这项工作的人而言。
        【解决方案5】:

        查看NSXMLParser 的文档。它包含在 iOS 中。您将 XML 数据提供给它的一个实例,然后成为它的委托,然后告诉它进行解析。

        NSXMLParser * parser = [[NSXMLParser alloc] initWithData:xmlData];
        parser.delegate = self;
        [parser parse];
        

        然后实施

        -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
        -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
        -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
        

        这三个方法在标签打开时调用,在标签内遇到数据时在标签关闭时调用。您可以通过将字符串与elementName 参数进行比较来侦听XML 中所需的标签,并将数据存储在您认为合适的对象中。

        查看 Apple 的文档以了解完整的实施细节。当有一个内置的类可以满足您的需要时,为什么还要使用第三方工具包?

        【讨论】:

          【解决方案6】:

          NSXMLParser 是标准的 Cocoa XML 解析工具。您将创建 NSXMLParserDelegate 接口的实现,然后将其传递给您创建的 NSXMLParser。我喜欢为我的每个模型类创建一个委托,然后在解析 XML 树时根据需要推送和弹出它们。您可以从您的委托为外部类创建回调,以对您的委托创建的对象执行任何操作。

          Apple 提供文档here。 Apple 的 SeismicXML 示例提供了一个很好的背景解析示例。

          【讨论】:

            猜你喜欢
            • 2013-07-05
            • 1970-01-01
            • 1970-01-01
            • 2010-11-06
            • 2013-07-13
            • 2010-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多