2013-04-19 1 views
-1

я извлечение данных из этого XML:Синтаксический XML, чтобы получить несколько значений

<appMetrics versionName="1.1.0" startDate="2013-04-16" metric="ActiveUsersByDay" groupBy="dayOfYear" endDate="2013-04-18" country="US" version="1.0" generatedDate="4/19/13 10:10 AM"> 
<day value="6" date="2013-04-16"/> 
<day value="4" date="2013-04-17"/> 
<day value="2" date="2013-04-18"/> 
</appMetrics> 

я был успешным с более простой XMLs, как если бы это было, как это вместо:

<appMetrics versionName="1.1.0" startDate="2013-04-16" metric="ActiveUsersByDay" groupBy="dayOfYear" endDate="2013-04-18" country="US" version="1.0" generatedDate="4/19/13 10:10 AM"> 
<day value="6"/> 
<day value="4"/> 
<day value="2"/> 
</appMetrics> 

Как я извлечь как дневное значение, так и дату под одним и тем же элементом? То, что я делал в прошлом, это просто поиск элемента, а затем копирование строки, но есть несколько частей, поэтому он не работает. Должен ли я сделать это массивом? Или есть способ просто взять стоимость дня и дату отдельно?

+0

Да там уже много способов, чтобы получить их по отдельности. Вы можете создать массив, если хотите. В чем проблема с Xcode? –

+0

Ive пытались получить детали как строку, так что очевидно, что она не работает, когда это две части. Как я могу сделать это как массив? – user1858163

+0

Xcode - это просто программа, которую вы используете для написания кода. Вопрос не имеет ничего общего с Xcode. Вы получите лучшие результаты, пометив свои вопросы на языке программирования, который вы используете. – Jim

ответ

1

Вы должны использовать NSXMLParser. В своем делегатом обратного вызова

parser:didStartElement:namespaceURI:qualifiedName:attributes: 

вы можете найти все атрибуты (например, value, date) в словаре атрибутов.

Редактировать

Синтаксический очень легко. Просто создайте парсер с вашими данными, настройте себя как делегат и начните синтаксический анализ. Поддерживайте некоторые изменчивые массивы, где вы все читаете.

См. Протокол NSXMLParser и протокол NSXMLParserDelegate.

Если вам нужна дополнительная помощь, перейдите по ссылке this question со многими ссылками на учебные пособия.

+0

Можете ли вы перейти к более подробному описанию? Я очень новичок в разборе XML. – user1858163

+0

См. Мой отредактированный ответ. – Mundi

0

Вы проанализировали его так, чтобы получить следующую вложенную структуру.

{ 
    "appMetrics": { 
     "versionName": "1.1.0", 
     "startDate": "2013-04-16", 
     "metric": "ActiveUsersByDay", 
     "groupBy": "dayOfYear", 
     "endDate": "2013-04-18", 
     "country": "US", 
     "version": "1.0", 
     "generatedDate": "4/19/13 10:10 AM", 
     "day": [ 
      { 
       "value": "6", 
       "date": "2013-04-16" 
      }, 
      { 
       "value": "4", 
       "date": "2013-04-17" 
      }, 
      { 
       "value": "2", 
       "date": "2013-04-18" 
      } 
     ] 
    } 
} 

Вы разобрать его с помощью NSXMLParser, или если вы беспокоитесь о производительности, libxml2 (для которых NSXMLParser является только Objective-C оберткой).

0

Просто проба это ....

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

if([elementName isEqualToString:@"day"]) { 
     currentValue = [attributeDict objectForKey:@"value"]; 
     currentDate = [attributeDict objectForKey:@"date"]; 
     NSLog(@"value:%@ date:@", currentValue, currentDate); 
    } 
} 
}