我无法从标记解析XML页面获得全文

时间:2013-12-11 10:23:52

标签: objective-c xml

我有一个xml标记<“text>”,其中包含以下文字:

  

Федя。 Онхороший,добрый,энергичныйпёс,которомуотчаяннонехватает   удачи.Никтоуже,никогданеузнает,чтослучилосьсФедей..“wall of   文字“。
8-910-444-59-42Лариса

当我想从那个标签中取出那个文本时我只得到最后一个,因为那个标签我只得到了“Лариса”。

我的问题是如何修复它以便我可以看到全文?也许以某种方式与“br”标签相关联?所有其他标签提取得很好,但不是这个..

#pragma mark - XML PARSER DELEGATE METHODS

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

    if ([elementName isEqualToString:@"description"]) isDescription = YES;
    if ([elementName isEqualToString:@"text"]) isText = YES;
    if ([elementName isEqualToString:@"name"]) isName = YES;
    if ([elementName isEqualToString:@"shortText"]) isShortText = YES;
    if ([elementName isEqualToString:@"images"]) isImage = YES;

        if ([elementName isEqualToString:@"announcement"]){
        self.currentPosition = [NSMutableDictionary dictionary];

            self.imageUrlString = nil;
       }

    if ([elementName isEqualToString:@"image"])
    {
        NSString *name = attributeDict[@"name"];

        if ([name isEqualToString:@"prev"]&& self.imageUrlString == nil)
        {
            NSString *urlString = attributeDict[@"url"];
            if (urlString)
            {
//                 NSLog(@"%@ found it", urlString);
                self.imageUrlString = urlString;
                [self.listOfImages addObject:self.imageUrlString];

            }
        }
    }

}

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

    if ([elementName isEqualToString:@"description"]) isDescription = NO;
    if ([elementName isEqualToString:@"text"]) isText = NO;
    if ([elementName isEqualToString:@"name"]) isName = NO;
    if ([elementName isEqualToString:@"shortText"]) isShortText = NO;
    if ([elementName isEqualToString:@"images"]) isImage = NO;

    if ([elementName isEqualToString:@"announcement"]){

        [self.listOfItems addObject:self.currentPosition];

    }

}

-(void)parserDidEndDocument:(NSXMLParser *)parser{

    [self.delegate didFinishParsingToArray:self.listOfItems];
    [self.delegate didFinishParsingToImages:self.listOfImages];

//      NSLog(@"%@", self.currentPosition);
//    NSLog(@"%@ Its work", self.listOfImages);

}

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

    if (isDescription) [self.currentPosition setValue:string forKey:@"description"];
    if (isText) [self.currentPosition setValue:string forKey:@"text"];
    if (isName) [self.currentPosition setValue:string forKey:@"name"];
    if (isShortText) [self.currentPosition setValue:string forKey:@"shortText"];

}

1 个答案:

答案 0 :(得分:2)

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString *)string实施中的问题。在这个方法中,你需要为每个已解析的标记附加找到的字符串,但是在你的实现中你设置了每个找到的字符串,实际上是找到的字符串的最后一个(对于单个标记,这个方法可以被多次调用)。

使用以下内容更改您的代码:

if (isText) {
    if (currentPosition[@"text"])
    {
      NSMutableString *str = currentPosition[@"text"]
      [str appendString:string];
    }
    else
    {
      [self.currentPosition setValue:[NSMutableString stringWithString:string] forKey:@"text"]
    }
  };

注意:您可以获得XML示例问题?我想测试我的XMLConverter