2013-07-31 71 views
1

我想解析URL中的一些XML數據。它幾乎可以工作,但預期的數據沒有被記錄。NSXMLParser無法正常工作

這裏是XML數據

<?xml version="1.0" encoding="utf-8"?> <result> 
<row> 
<id>1</id> 
<menu_id>1</menu_id> 
<group_id>1</group_id> 
<name>Merchandise</name> 
<image>bag of beans.jpg</image> 
</row> 
<row> 
<id>4</id> 
<menu_id>1</menu_id> 
<group_id>1</group_id> 
<name>Misc</name> 
<image>tea.jpg</image> 
</row> 

這裏的樣本是我的代碼:

#pragma mark - NSXMLParserDelegate 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 
    // If you have a more complex object you could init here 
    // Since I'm just storing a string I won't do anything 
    if ([elementName isEqualToString:@"name"]) { 
    // NSLog(@"didStartElement - %@", elementName); 
    } 
    } 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if (!self->currentStringValue) { 
    self->currentStringValue = [[NSMutableString alloc] init]; 
    // NSLog(@"didStartElement - %@", string); 

    } 


    [self->currentStringValue appendString:string]; 
} 

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

     NSString *currentStringValue = [self->currentStringValue 
           stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    self->currentStringValue = nil; 

    if ([elementName isEqualToString:@"name"]) { 
      self->ourExpectedElementValue = currentStringValue; 
      NSLog(@"%@",currentStringValue); 
     } 
    } 

正如你可以在XML數據看,有不止一個「名稱」元素與3日至最後一行讀取

NSLog(@"%@",currentStringValue); 

意味着所有的<name> TA內登錄的所有值GS,而是它僅記錄本:

2013-07-31 19:02:56.394 Touch2Go[1775:11303] Merchandise 
+0

我無法重現您的問題。代碼記錄「商品」和「雜項」。爲了避免解析器錯誤,我將缺少的''添加到XML數據中。 –

+0

但是沒有標籤。這是問題嗎? – AndroidDev

+0

你在第一行有一個起始''標籤。是的,沒有它不會奏效。 –

回答

1

正如在討論橫空出世,XML數據沒有一個單一的頂級元素 所要求的XML規範,所以它看起來像這個:

<row> 
    ... 
</row> 
<row> 
    ... 
</row> 
<row> 
    ... 
</row> 

解析器在第一個完整的「行」標記(並返回一個錯誤條件)後停止解析。如果數據包含在單個頂級元素中,則所有元素都按預期進行解析。

0

你必須採取數組。當它從xml中獲取字符串時,您必須在didEndElement方法中將其添加到數組中。

+0

請問你能否在代碼中表明,然後我會+1 – AndroidDev