如何解析用的NSXMLParser一个基本的XML文件?(How do I parse a basi

2019-08-02 04:20发布

我想弄清楚的NSXMLParser我的iPhone应用程序,虽然我大致明白它是如何工作的,我还是有点困惑如何提取我所需要的值。

那我解析XML结果是非常基本的。 它就像这样:

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

我需要做3两件事:获取的状态值。 获得从第一记录内容的价值。 有可能来的,所以我只需要获得第一,提供多个“记录”元素的响应。

我无法弄清楚如何简单地做到这一点。 最重要的是我所见过的例子包括创建一个单独的对象,以这个数据填充到,我不能看到所必需2倍的值。 谁能告诉我怎么拉这些2个数据出来,只有第一个记录?

Answer 1:

当这种情况发生的第一件事情NSXMLParser遇到一个XML标签是委托方法parser:didStartElement:namespaceURI:qualifiedName:attributes:被调用; 你可能只需要使用elementName这里变量。 然后,XML解析器读取标签,并呼吁人物parser:foundCharacters:与内容。 最后parser:didEndElement:namespaceURI:qualifiedName被调用。

我已经采取了,作为苹果在SeismicXML examlple使用的方法,是使用方法如下:

  1. parser:didStartElement:namespaceURI:qualifiedName:attributes: ,元素名称的字符串比较已知值,看它是否是你所关心的一个字符串。 如果是这样,然后设置一个实例变量(一个NSMutableString ;我会调用它contentOfCurrentXMLProperty )为空字符串。 否则,将其设置为nil
  2. parser:foundCharacters:中,找到的字符追加到contentOfCurrentXMLProperty
  3. parser:didEndElement:namespaceURI:qualifiedName ,分配的值contentofCurrentXMLProperty到任何适当的变量是。

更多信息请参见该SeismicXML例子。

一对夫妇的关于你的具体情况件事:第一,因为XML解析器只返回一个字符串,你需要将字符串转换为一个整数(或任何你正在使用的数据类型) status

其次,由于您只需要为第一值record ,在parser:didStartElement:...我会成立一个BOOL该标志是否你已经看到了一个record标签之前,如果是这样,设置contentOfCurrentXMLPropertynil



Answer 2:

记住的NSXMLParser是SAX般的基于事件的解析器保持一致,你必须设置你的解析器,启动它,并听取了关键事件。

设置解析器了起来:

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
[parser parse];

重写这些方法:

– parser:didStartElement:namespaceURI:qualifiedName:attributes:
– parser:didEndElement:namespaceURI:qualifiedName:
– parser:foundCharacters:

你的函数必须基本上是这样的:

  • 当你达到一个标签,下次启动:

-(void)parser: didStartElement:(NSString *) namespaceURI:(NSString *) qualifiedName:(NSString *) attributes:(NSDictionary *)

  • 如果该标签的名称是“状态”:

[elementName isEqualToString:@"status"]

  • 给我的标签的字符串数据:

- (void)parser:(NSXMLParser *) foundCharacters:(NSString *)

...

[<your statusValueHolder as NSMutableString> appendString:<foundCharacters' parameter>]

...

您可以申请其他情况相同的逻辑(搜索标签的第一次启动名为“record”,放弃在到达标记的末尾,名为“record”,等等)

看看这一点,并尝试在家里: 让你的NSXMLParser朋友。另请参阅API参考文档的的NSXMLParser额外的委托方法的NSXMLParser的委托。



文章来源: How do I parse a basic XML file with NSXMLParser?