Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере показаны некоторые приемы работы с атрибутами и свойствами XML-элемента аналитической панели. После его запуска выполняются следующие операции:
извлекается XML-элемент из объекта аналитической панели;
проверяется наличие и извлекается значение атрибута по заданному наименованию;
из XML-элемента аналитической панели извлекается дочерний XML-элемент;
проверяется наличие и извлекается значение свойства дочернего XML-элемента по заданному наименованию;
создается новый XML-элемент;
для нового XML-элемента задаются двоичные данные, а также создается и добавляется дочерний XML-элемент с атрибутами двоичного, целочисленного, вещественного и строкового типа;
для дочернего XML-элемента задаются строковые данные, а также извлекается наименование родительского XML-элемента.
Для выполнения примера предполагается наличие файла с наименованием «SplittedListReportCell-procedural.png». Далее необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение аналитической панели») следующий код:
// Получаем контроллер аналитической панели
MADashboardReportViewController* dashboard = (MADashboardReportViewController *)m_controller;
// Получаем аналитическую панель
APKap *report = [dashboard report];
// Извлекаем XML-объект из аналитической панели
APXMLParserObject *xmlObject = [report data];
// Проверяем наличие в XML-объекте атрибута с заданным наименованием
BOOL hasAttribute = [xmlObject hasAttributeForKey:@"version"];
// Получаем значение для найденного атрибута
NSString *version = hasAttribute? [xmlObject stringAttributeForKey:@"version"] : @"не определена";
// Выводим в консоль среды разработки значение атрибута
NSLog(@"Версия элемента %@: %@",[xmlObject elementName] , version);
// Получаем дочерний XML-объект в массиве вложенных объектов
APXMLParserObject *xmlSecondObj = [[xmlObject objects] objectAtIndex:0];
// Проверяем в дочернем элементе наличие свойства с заданным наименованием
BOOL hasProp = [xmlSecondObj hasPropForKey:@"name"];
if(hasProp == YES)
{
// Получаем и выводим в консоль среды разработки значение свойства с заданным наименованием
NSString *nameProp =[xmlSecondObj stringPropForKey:@"name"];
NSLog(@"Значение свойства «name» дочернего элемента: %@", nameProp);
}
// Создаем новый корневой XML-элемент
APXMLParserObject *createdXmlObject = [APXMLParserObject parserObjectWithName:@"rootObject" attributes:nil];
// Получаем путь к файлу
NSString *path = [[NSBundle mainBundle] pathForResource:@"SplittedListReportCell-procedural" ofType:@"png"];
// Получаем двоичные данные файла
NSData *nsData = [NSData dataWithContentsOfFile: path];
// Задаем двоичные данные для нового корневого XML-элемента
[createdXmlObject setCdata:nsData];
// Создаем справочник, содержащий атрибуты для нового дочернего элемента
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
// Создаем и помещаем в справочник вещественный атрибут
NSNumber *propD = [NSNumber numberWithDouble:5.5];
[attributes setObject: propD forKey:@"doubleAttribute"];
// Создаем и помещаем в справочник целочисленный атрибут
NSNumber *propI = [NSNumber numberWithInt: 42];
[attributes setObject: propI forKey:@"intAttribute"];
// Создаем и помещаем в справочник атрибут логического типа
[attributes setObject: @"TRUE" forKey:@"boolAttribute"];
[attributes setObject: @"Строка" forKey:@"stringAttribute"];
// Создаем новый дочерний XML-элемент
APXMLParserObject *child = [APXMLParserObject parserObjectWithName:@"Name1" attributes:attributes];
// Добавляем дочерний XML-элемент в новый корневой элемент
[createdXmlObject addObject:child];
// Задаем для нового дочернего элемента строковые данные
[child setCharacters: @"Строковые данные"];
// Получаем атрибуты нового дочернего элемента
NSMutableDictionary *childAttributes = [child attributes];
// Получаем значение логического типа для заданного атрибута в новом дочернем элементе
BOOL boolAttr = [child boolAttributeForKey:@"boolAttribute"];
// Получаем целочисленное значение для заданного атрибута в новом дочернем элементе
int intAttr = [child intAttributeForKey:@"intAttribute"];
// Получаем вещественное значение для заданного атрибута в новом дочернем элементе
double doubleAttr = [child doubleAttributeForKey:@"doubleAttribute"];
// Получаем строковое значение для заданного атрибута в новом дочернем элементе
NSString *stringAttr = [child stringAttributeForKey:@"stringAttribute"];
// Выводим в консоль среды разработки полученную информацию
if([createdXmlObject cdata] != nil) NSLog(@"Новый корневой элемент содержит двоичные данные");
else NSLog(@"Новый корневой элемент не содержит двоичные данные");
NSString *parentName = [[child parent] elementName];
NSLog(@"Наименование родительского элемента для нового дочернего элемента: %@", parentName);
NSLog(@"Cтроковые данные нового дочернего элемента: %@", [child characters]);
NSLog(@"Значение логического типа для атрибута «boolAttribute»: %@", boolAttr? @"YES" : @"NO");
NSLog(@"Значение целочисленного типа для атрибута «intAttribute»: %d", intAttr);
NSLog(@"Значение вещественного типа для атрибута «doubleAttribute»: %f", doubleAttr);
NSLog(@"Значение строкового типа для атрибута «stringAttribute»: %@", stringAttr);
В результате выполнения примера в консоли среды разработки была выведена информация о полученных и созданных XML-элементах, а также результат добавления двоичных данных для нового корневого XML-элемента:
Версия элемента kap: 7.1
Значение свойства «name» дочернего элемента: Аналитическая панель
Новый корневой элемент содержит двоичные данные
Наименование родительского элемента для нового дочернего элемента: rootObject
Cтроковые данные нового дочернего элемента: Строковые данные
Значение логического типа для атрибута «boolAttribute»: YES
Значение целочисленного типа для атрибута «intAttribute»: 42
Значение вещественного типа для атрибута «doubleAttribute»: 5.500000
Значение строкового типа для атрибута «stringAttribute»: Строка
См. также: