如何使用NSXMLParser解析带有空标记的xml?

时间:2013-11-27 11:20:45

标签: ios iphone objective-c null nsxmlparser

如何使用空值解析xml标记以使用NSXMLParser获取空值。我正在使用以下代码:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    if ([elementName isEqualToString:@"Video"])
    {
        isStatus = YES;
    }
    if ([elementName isEqualToString:@"ArrayOfVideo"])
    {
        isStatus = NO;
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *)[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if (isStatus)
    {
        if ([elementName isEqualToString:@"MediaOriginalFileName"])
        {
            [originalFileAry addObject:currentNodeContent];
        }
        if ([elementName isEqualToString:@"MediaType"])
        {
            [typeArray addObject:currentNodeContent];
        }
        if ([elementName isEqualToString:@"VideoMediaSource"])
        {
            [tableda addObject:currentNodeContent];
        }
        if ([elementName isEqualToString:@"VideoThumbnail"])
        {
            [tableImg addObject:currentNodeContent];
        }
        if ([elementName isEqualToString:@"VideoTitle"])
        {
            [tableData addObject:currentNodeContent];
        }
    }
}

这里我没有得到标签“VideoThumbnail”的空值..请帮我解决这个问题......

3 个答案:

答案 0 :(得分:0)

实际上,事情是你的方法

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

}

由于该特定数据中没有数据,因此未调用

。因此,在以下方法中,您可以执行以下操作:

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

{

if (isStatus)
{

    if ([elementName isEqualToString:@"VideoThumbnail"])
    {
        if([currentContent Length]>0)
        {
        [tableImg addObject:currentNodeContent];
        }
        else
        {
            [tableImg addObject:@" "];
         }
    }

}

}

原谅我的缩进...而且TBXML解析是使用xml解析更快更简单的方法。你可以直接给出标签及其子节点的名称。

答案 1 :(得分:0)

这是我尝试过的,我发现了空字符串,正如你的例子所预期的那样。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"the tag is %@",elementName);
if([elementName isEqualToString:@"VideoThumbnail"])
    {
        NSLog(@"video thumbnail tag arrived");
        datastringThumbnail =[[NSMutableString alloc]init];
    }

}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
 if(datastringThumbnail)
 {
   datastringThumbnail = [NSMutableString stringWithFormat:@"%@",string];
 }


}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
  {
    if([elementName isEqualToString:@"VideoThumbnail"])
        NSLog(@"the string is : %@",datastringThumbnail);
    // [tableImg addObject:currentNodeContent];

    //  currentNodeContent is datastringThumbnail in my case
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"the string we get is %@",datastringThumbnail);
}

仅供参考,datastringThumbnail是可变字符串,用于存储缩略图标记的数据(如果有)。在您的情况下,该标记中没有数据,此字符串为空。随时随地使用它。

答案 2 :(得分:0)

你试试

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

可能是你得到了标签“VideoThumbnail”的空值。

以下链接对您有用。

https://developer.apple.com/library/ios/samplecode/SeismicXML/Listings/SeismicXML_APLParseOperation_m.html#//apple_ref/doc/uid/DTS40007323-SeismicXML_APLParseOperation_m-DontLinkElementID_11