我试图解析的服务是这里:http://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false返回“空值”的XMLParser
我想解析一个简单的XML。该XML的结构看起来是这样的:
<GeocodeResponse>
<status>OK</status>
<result>
<type>street_address</type>
............
............
我的解析代码是:
-(void)parserDidStartDocument:(NSXMLParser *)parser{
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSLog(@"Element Name is =%@, \nNamespaceURI is =%@, \nQualifiedName is =%@, \n, Attributes Dictionary is = %@",elementName,namespaceURI,qName,attributeDict);
currentEltValue = elementName;
if([elementName isEqualToString:@"status"]){
parsedata = [[NSString alloc ]init];
NSLog(@"Initializing the variable here");
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if([currentEltValue isEqualToString:@"status"]){
NSLog(@"Inside if loop");
parsedata = string;
NSLog(@"Found Characters value is = %@",parsedata);
}
else parsedata = NULL;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:@"status"]){
NSLog(@"PARSED DATA: = %@",parsedata);
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"Did end document \t parseData Valus is =%@",parsedata);
}
当我运行该程序,在我的控制台我得到:
2012-08-01 13:21:10.721 XML_Parsing[5624:207] Element Name is =status,
NamespaceURI is =(null),
QualifiedName is =(null),
, Attributes Dictionary is = {
}
2012-08-01 13:21:10.722 XML_Parsing[5624:207] Initializing the variable here
2012-08-01 13:21:10.722 XML_Parsing[5624:207] Inside if loop
2012-08-01 13:21:10.723 XML_Parsing[5624:207] Found Characters value is = OK
2012-08-01 13:21:10.723 XML_Parsing[5624:207] PARSED DATA: = OK
2012-08-01 13:21:10.724 XML_Parsing[5624:207] Inside if loop
2012-08-01 13:21:10.724 XML_Parsing[5624:207] Found Characters value is =
2012-08-01 13:21:10.803 XML_Parsing[5624:207] Did end document parseData Valus is =(null)
我不知道为什么if条件运行两次?
UPDATE * 解决方案 * 这解决了我的问题:
1]在DidEndElement:申报currentEltValue = @ “”。
2]将所有parsedata的实例作为self.parsedata进行访问。
我删除了其他部分仍然得到相同的输出。我们可以通过使用XML_Parsing来实现这个功能。XML_Parsing 2012-08-01 15:17:33.951 XML_Parsing Inside if循环 2012-08-01 15:17:33.952 XML_Parsing找到的字符值是= OK 2012-08-01 15:17:33.953 XML_Parsing [8151:207 ] PARSED DATA = OK 2012-08-01 15:17:33.954 XML_Parsing [8151:207] Inside if循环 2012-08-01 15:17:33.954 XML_Parsing [8151:207]找到的字符数值是 2012-08 -01 15:17:33.957 XML_Parsing [8151:207]没有结束文档\t parseData Valus =结果 而链接是, [link] http://maps.googleapis。com/maps/api/geocode/xml?address = 1600 + Amphitheater + Parkway,+ Mountain + View,+ CA&sensor = false – footyapps27 2012-08-01 09:49:29
@ footyapps27 parseData value“result”如何成为标签之一?你在其他地方分配给parseData吗? – MadhavanRP 2012-08-01 09:56:33
以及你可以从程序中看到,没有。这就是我们为什么要采用其中一个标签而感到困惑的原因。 – footyapps27 2012-08-01 10:04:21