0

我想在 NSXMLParse 中为空标签 XML 设置字符串“EMPTY”。例:我的 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 标签是否为空。解析时错过了。你有什么建议吗?提前致谢

4

1 回答 1

0

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

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

您现在拥有它的方式意味着可以保存部分数据,foundCharacters并且由于不会为空标签调用该方法,因此您的某些逻辑正在设置但从未实际保存。

于 2013-07-18T08:15:49.383 回答