Working with Attributes and Properties of Dashboard XML Element

Operating system requirements: iOS 5.0 or later.

Mobile device: iPad.

Description

This example shows some methods of working with attributes and properties of dashboard XML element. After starting the example the following operations are executed:

Source Code

Executing the example requires a file named SplittedListReportCell-procedural.png. Then it is required to place the following code in the boy of the executeExample method of the ViewController class (see the Displaying of Dashboard section):

// Get dashboard controller
MADashboardReportViewController* dashboard = (MADashboardReportViewController *)m_controller;
// Get dashboard
APKap *report = [dashboard report];
// Take XML object from dashboard
APXMLParserObject *xmlObject = [report data];
// Check if XML object contains attribute with specified name
BOOL hasAttribute = [xmlObject hasAttributeForKey:@"version"];
// Get value for found attribute
NSString *version = hasAttribute? [xmlObject stringAttributeForKey:@"version"] : @"not defined";
// Display attribute value in the development environment console
NSLog(@"%@ element version: %@",[xmlObject elementName] , version);
// Get child XML object in the array of nested objects
APXMLParserObject *xmlSecondObj = [[xmlObject objects] objectAtIndex:0];
// Check if child object contains property with specified name
BOOL hasProp = [xmlSecondObj hasPropForKey:@"name"];
if(hasProp == YES)
{
    // Get and display value of the property with specified name in the development environment console
    NSString *nameProp =[xmlSecondObj stringPropForKey:@"name"];
    NSLog(@"Value of the "name" property of the child element: %@", nameProp);
}
// Create a new root XML element
APXMLParserObject *createdXmlObject = [APXMLParserObject parserObjectWithName:@"rootObject" attributes:nil];
// Get path to file
NSString *path = [[NSBundle mainBundle] pathForResource:@"SplittedListReportCell-procedural" ofType:@"png"];
// Get binary data of file
NSData *nsData = [NSData dataWithContentsOfFile: path];
// Set binary data for a new root XML element
[createdXmlObject setCdata:nsData];
// Create a dictionary containing attributes for a new child element
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
// Create a place real attribute to dictionary
NSNumber *propD = [NSNumber numberWithDouble:5.5];
[attributes setObject: propD forKey:@"doubleAttribute"];
// Create and place integer attribute to dictionary
NSNumber *propI = [NSNumber numberWithInt: 42];
[attributes setObject: propI forKey:@"intAttribute"];
// Create and place logical type attribute to dictionary
[attributes setObject: @"TRUE" forKey:@"boolAttribute"];
[attributes setObject: @"String" forKey:@"stringAttribute"];
// Create a new child XML element
APXMLParserObject *child = [APXMLParserObject parserObjectWithName:@"Name1" attributes:attributes];
// Add child XML element to the new root element
[createdXmlObject addObject:child];
// Set string data for the new child element
[child setCharacters: @"String data"];
// Get new child element attributes
NSMutableDictionary *childAttributes = [child attributes];
// Get logical type value for specified attribute in the new child element
BOOL boolAttr = [child boolAttributeForKey:@"boolAttribute"];
// Get integer value for specified attribute in the new child element
int intAttr = [child intAttributeForKey:@"intAttribute"];
// Get real value of specified attribute in the new child element
double doubleAttr = [child doubleAttributeForKey:@"doubleAttribute"];
// Get string value of specified attribute in the new child element
NSString *stringAttr = [child stringAttributeForKey:@"stringAttribute"];
// Enter obtained information to the development environment console
if([createdXmlObject cdata] != nil) NSLog(@"New root element contains binary data");
else NSLog(@"New root element does not contain binary data");
NSString *parentName = [[child parent] elementName];
NSLog(@"Parent element name for new child element: %@", parentName);
NSLog(@"String data of new child element: %@", [child characters]);
NSLog(@"Logical type value for the boolAttribute attribute: %@", boolAttr? @"YES" : @"NO");
NSLog(@"Integer type value for the intAttribute attribute: %d", intAttr);
NSLog(@"Real type value for the doubleAttribute attribute: %f", doubleAttr);
NSLog(@"String type value for the stringAttribute attribute: %@", stringAttr);

After executing the example the development environment console displays information about obtained and created XML elements, and also the result of binary data addition to the new root XML element:

kap element version: 7.1

Value of the "name" property of the child element: Dashboard

New root element contains binary data

Name of parent element for the new child element: rootObject

String data for the new child element: String data

Logical type value for the boolAttribute attribute: YES

Integer type value for the intAttribute attribute: 42

Real type value for the doubleAttribute attribute: 5.500000

String type value for the stringAttribute attribute: String

See also:

Examples of Component Use