2013-07-17 26 views
0

我想为NSXMLParse中的空标记XML设置字符串“EMPTY”。 Exm:我的xml:在NSXMLParse中设置空标记的字符串iOS

<STATE>0</STATE> 
<MEMO/> 

在上面的XML中,MEMO标签是空的。我想当NSXMLParse解析为标签时,如果它为空,请在标签中获取字符串“EMPTY”。我用波纹管代码来解析xml:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 
{ 
    NSLog(@"Did start element"); 
    if ([elementName isEqualToString:@"FILENAME"]) 
    { 
     XML_FIELD = FILENAME_CLOUD2; 
     NSLog(@"found rootElement"); 

     return; 
    } 
    else if ([elementName isEqualToString:@"MEMO"]) 
    { 
     NSLog(@"found rootElement"); 
     XML_FIELD = MEMO; 
     return; 
    } 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 

      NSLog(@"Did end element"); 
     if ([elementName isEqualToString:@"FILENAME"]) 
     { 
      NSLog(@"rootelement end"); 
     } 
     [strMemoEmpty setString:@"EMPTY"]; 
     XML_FIELD = UNIMPORTANT2; 


} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    //NSString *tagName = @"USER_NAME"; 

    if (XML_FIELD == FILENAME_CLOUD2) 
    { 
     NSLog(@"Value %@",string); 
     [FileCompletedArray insertObject:string atIndex:0]; 

    } 
    else if (XML_FIELD == MEMO) 
    { 
     NSLog(@"Value %@",string); 
     if (string != nil) { 
      [strMemoEmpty setString:@""]; 
      [strMemoEmpty appendString: string]; 
      NSLog(@"foundResults: %@",strMemoEmpty); 
     } 
      [MemoArray insertObject:string atIndex:0]; 
    } 
} 

我用上面的代码但它没有检查MEMO标签是空的。它解析时错过了。你有什么建议吗?在此先感谢

+0

我还没有真正使用NSXMLParser,但我的理解是,当xml标记为EMPTY时,您尝试将字符串设置为'EMPTY'。如果可能的话,你应该看看TBXML,它是iOS应用程序中速度最快,效率最高的xml解析器之一。我将它与ASIHTTPREQUEST库一起使用,但是我听说ASIHTTPREQUEST没有更多的更新 - 一个NSURLConnection的子类并使得实现异步调用更容易,这通常更适合于大量数据进行分析和分析。对不起,这个答案不完全是一个好答案,但它是一个评论:) – jsetting32

+0

所以你说的是什么不被NSXMLParser读入?如果可能的话,请包括您尝试解析的xml服务的开始标记和结束标记...通常应该有开始标记和结束标记...例如 ...就像 – jsetting32

+0

@ jsetting32:谢谢,但我不能编辑服务器响应的数据xml。我只想要如何获得字符串。你给我看? – NGOT

回答

0

代码的建设是一个有点陌生而凌乱,应重新组织这样:

  1. didStartElement为起始元素创建新的存储,并设置任何标志
  2. foundCharacters没有逻辑,它只是将接收到的字符串附加到可变缓冲区(对于同一个标记可以多次调用它)
  3. didEndElement包含逻辑(并检查找到的字符的长度并在需要时用您的空值替换)

你现在的方式意味着部分数据可能被保存在foundCharacters中,并且由于该方法没有用于空标记,所以你的一些逻辑被设置,但从未实际保存。