我想弄清楚的NSXMLParser我的iPhone应用程序,虽然我大致明白它是如何工作的,我还是有点困惑如何提取我所需要的值。
那我解析XML结果是非常基本的。 它就像这样:
<start>
<status>300</status>
<record>
<title>The Title</title>
<content>Some content</content>
</record>
</start>
我需要做3两件事:获取的状态值。 获得从第一记录内容的价值。 有可能来的,所以我只需要获得第一,提供多个“记录”元素的响应。
我无法弄清楚如何简单地做到这一点。 最重要的是我所见过的例子包括创建一个单独的对象,以这个数据填充到,我不能看到所必需2倍的值。 谁能告诉我怎么拉这些2个数据出来,只有第一个记录?
当这种情况发生的第一件事情NSXMLParser
遇到一个XML标签是委托方法parser:didStartElement:namespaceURI:qualifiedName:attributes:
被调用; 你可能只需要使用elementName
这里变量。 然后,XML解析器读取标签,并呼吁人物parser:foundCharacters:
与内容。 最后parser:didEndElement:namespaceURI:qualifiedName
被调用。
我已经采取了,作为苹果在SeismicXML examlple使用的方法,是使用方法如下:
- 在
parser:didStartElement:namespaceURI:qualifiedName:attributes:
,元素名称的字符串比较已知值,看它是否是你所关心的一个字符串。 如果是这样,然后设置一个实例变量(一个NSMutableString
;我会调用它contentOfCurrentXMLProperty
)为空字符串。 否则,将其设置为nil
。 - 在
parser:foundCharacters:
中,找到的字符追加到contentOfCurrentXMLProperty
。 - 在
parser:didEndElement:namespaceURI:qualifiedName
,分配的值contentofCurrentXMLProperty
到任何适当的变量是。
更多信息请参见该SeismicXML例子。
一对夫妇的关于你的具体情况件事:第一,因为XML解析器只返回一个字符串,你需要将字符串转换为一个整数(或任何你正在使用的数据类型) status
。
其次,由于您只需要为第一值record
,在parser:didStartElement:...
我会成立一个BOOL
该标志是否你已经看到了一个record
标签之前,如果是这样,设置contentOfCurrentXMLProperty
到nil
。
记住的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的委托。