在NSXMLParse iOS中为空标记设置字符串

时间:2013-07-17 02:51:31

标签: iphone ios objective-c set string

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

<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标签是否为空。它在解析时错过了。你有什么建议吗?提前致谢

1 个答案:

答案 0 :(得分:0)

你的代码构造有点奇怪和混乱,你应该重新组织:

  1. didStartElement为起始元素创建新存储并设置任何标志
  2. foundCharacters没有逻辑,只是将收到的字符串附加到可变缓冲区(对于同一个标记可以多次调用)
  3. didEndElement包含逻辑(并检查找到的字符的长度,并在需要时替换空值)
  4. 现在你拥有它的方式意味着部分数据可以保存在foundCharacters中,并且因为没有为空标记调用该方法,所以你的一些逻辑被设置但从未实际保存过。