-1

XMLパーサーを使用してデータを取得しています。

- (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 ( [elementName isEqualToString:@"country"] ) 
    {
        x++;
       [messages addObject:[NSDictionary dictionaryWithObjectsAndKeys:Id,@"ID",Name,@"NAME",Image,@"IMAGE",nil]];
    //**111**
         NSLog(@"Data in Message : %@", [messages objectAtIndex:(x-1)]);

        [Id setString:@""];
        [Name setString:@""];
        [Image setString:@""];
    }
    if ( [elementName isEqualToString:@"id"] )
    {
        [Id appendString:currentNodeContent];
    }
    if ( [elementName isEqualToString:@"name"] ) 
    {
        [Name appendString:currentNodeContent];
    }
    if ( [elementName isEqualToString:@"im"] ) 
    {
        [Image appendString:currentNodeContent];
    }
}

// At // * 111 *メッセージは出力されますが、xmlパーサーを呼び出した後にこれを実行すると、出力されません。

chatParser = [[NSXMLParser alloc] initWithData:receivedData];
[chatParser setDelegate:self];
[chatParser parse];

 NSLog(@"\n\nMessages...\n\n%@", messages); //here there is no data printing

この時点で、空で印刷されています。

メッセージ。

(
        {
        ID = "";
        IMAGE = "";
        NAME = "";
    },
        {
        ID = "";
        IMAGE = "";
        NAME = "";
    },
        {
        ID = "";
        IMAGE = "";
        NAME = "";
    },
        {
        ID = "";
        IMAGE = "";
        NAME = "";
    },
        {
        ID = "";
        IMAGE = "";
        NAME = "";
    },

)

メッセージのプロパティを定義し、それを合成しました。viewDidLoadで私はこれをしました

 messages=[[NSMutableArray alloc] init];

助けてくれてありがとう..

4

2 に答える 2

0

あなたの問題は、Id, Name, Image常に同じオブジェクトを線で使用することです

[Id setString:@""];
[Name setString:@""];
[Image setString:@""];

それぞれの国要素の末尾にある値を "" に設定します。

次のようになります (テストされていないため、タイプミスがある可能性があります)。

- (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 ([elementName isEqualToString:@"id"] )
  {
    [lastMessage setObject:currentNodeContent forKey:"ID"];
  }
  else if ( [elementName isEqualToString:@"name"] ) 
  {
    [lastMessage setObject:currentNodeContent forKey:"NAME"];
  }
  else if ( [elementName isEqualToString:@"im"] ) 
  {
    [lastMessage setObject:currentNodeContent forKey:"IMAGE"];
  }
  else if ( [elementName isEqualToString:@"country"] ) 
  {
    NSLog(@"Data in Message : %@", lastObject);
    [messages addObject:lastMessage];
    [lastMessage release];
  }
}

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elName namespaceURI:(NSString *)uri 
{
   if ( [elementName isEqualToString:@"country"] )
   {
     lastMessage = [[NSMutableDictionary alloc]init];
   }
}
于 2012-09-06T07:48:21.453 に答える
0

以下のコードを使用します。CaseId、PartyId、CartId をこのクラスのプロパティとして持つテーブルは NSObject クラスです。URL を使用して loadXMLByURL メソッドを呼び出したばかりの xml url がある場合、解析後、テーブルを持つ TableArray 内の各オブジェクトを取得します。上記のプロパティを持つオブジェクト。

NSMutableString *currentNodeContent;
NSXMLParser     *parser;
Tweet           *currentTweet;
bool            isStatus;

-(id) loadXMLByURL:(NSString *)urlString
{
    _tweets         = [[NSMutableArray alloc] init];
    NSURL *url      = [NSURL URLWithString:urlString];
    NSData  *data   = [[NSData alloc] initWithContentsOfURL:url];
    parser          = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self;
    [parser parse];
    return self;
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

    - (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
    {
        if ([elementname isEqualToString:@"Table"]) 
        {
            currentTable = [Table alloc];
                isStatus = YES;
        }
    }

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if (isStatus) 
    {
        if ([elementname isEqualToString:@"CaseId"]) 
        {
            currentTable.CaseId = currentNodeContent;
        }
        if ([elementname isEqualToString:@"PartyId"]) 
        {
            currentTable.PartyId = currentNodeContent;
        }
        if ([elementname isEqualToString:@"CartId"]) 
        {
            currentTable.CartId = currentNodeContent;
        }

    }
    if ([elementname isEqualToString:@"Table"]) 
    {
        [self.tableArray addObject:currentTable];
        currentTable = nil;
        currentNodeContent = nil;
    }
}

ご不明な点がございましたらお知らせください。

于 2012-09-06T07:29:44.830 に答える