Iphone 如何使用NSXMLParser解析基本XML文件?

Iphone 如何使用NSXMLParser解析基本XML文件?,iphone,objective-c,xml,cocoa-touch,nsxmlparser,Iphone,Objective C,Xml,Cocoa Touch,Nsxmlparser,我正在尝试为我的iPhone应用程序找出NSXMLParser,虽然我大致了解它是如何工作的,但对于如何提取所需的值,我仍然有点困惑 我正在解析的XML结果非常基本。是这样的: <start> <status>300</status> <record> <title>The Title</title> <content>Some content</content> </record

我正在尝试为我的iPhone应用程序找出NSXMLParser,虽然我大致了解它是如何工作的,但对于如何提取所需的值,我仍然有点困惑

我正在解析的XML结果非常基本。是这样的:

<start>
 <status>300</status>
 <record>
  <title>The Title</title>
  <content>Some content</content>
 </record>
</start>

300
标题
一些内容
我需要做3件事: 获取status的值。 从第一条记录中获取内容的值。可能会有一个响应提供多个“记录”元素,所以我只需要得到第一个


我不知道如何简单地做到这一点。我看到的大多数示例都涉及到创建一个单独的对象来填充这些数据,我看不出这对于2个值是必要的。有谁能告诉我如何提取这两条数据,并且只针对第一条记录?

NSXMLParser
遇到XML标记时,发生的第一件事是调用委托方法
parser:didStartElement:namespaceURI:qualifiedName:attributes:
;您可能只需要在此处使用
elementName
变量。然后,XML解析器读取标记中的字符,并使用内容调用
parser:foundCharacters:
。最后调用解析器:didEndElement:namespaceURI:qualifiedName

正如苹果在地震活动CXML示例中使用的那样,我所采用的方法是使用以下方法:

  • 解析器:didStartElement:namespaceURI:qualifiedName:attributes:
    中,将元素名的字符串与已知值进行比较,以确定它是否是您关心的字符串。如果是这样,那么将实例变量(一个
    NSMutableString
    ;我将其称为
    contentOfCurrentXMLProperty
    )设置为空字符串。否则将其设置为
    nil
  • parser:foundCharacters:
    中,将找到的字符追加到
    contentOfCurrentXMLProperty
  • parser:didEndElement:namespaceURI:qualifiedName
    中,将
    contentofCurrentXMLProperty
    的值分配给适当的变量
  • 有关更多信息,请参见SeismicXML示例

    关于您的具体情况,有两点:首先,由于XML解析器只返回字符串,您需要将字符串转换为
    状态的整数(或任何您正在使用的数据类型)


    其次,因为您只需要
    记录的第一个值,所以在
    解析器:didStartElement:…
    中,我设置了一个
    BOOL
    来标记您之前是否已经看到
    记录
    标记,如果是这样,将
    contentOfCurrentXMLProperty
    设置为
    nil

    请记住,NSXMLParser类似于SAX的基于事件的解析器,您必须设置解析器,启动它并侦听关键事件

    设置解析器:

    NSXMLParser*parser=[[NSXMLParser alloc]initWithData:data]
    [解析器setDelegate:self]
    [语法分析器解析]

    覆盖这些方法:

    –解析器:didStartElement:namespaceURI:qualifiedName:attributes:
    –解析器:didEndElement:namespaceURI:qualifiedName:
    –解析器:查找字符:

    您的功能必须基本上说:

    • 当到达标记的下一个起点时:
    -(void)解析器:didStartElement:(NSString*)namespaceURI:(NSString*)qualifiedName:(NSString*)attributes:(NSDictionary*)

    • 如果该标签的名称为“状态”:
    [elementName IsequalString:@“状态”]

    • 给我标签的字符串数据:
    -(void)解析器:(NSXMLParser*)foundCharacters:(NSString*)

    [appendString: