NSMutableArray и NSDictionary, использующий для проанализированных данных XML - PullRequest
0 голосов
/ 13 октября 2011

Пожалуйста, кто-нибудь, помогите мне. У меня большие проблемы .... Теперь моя проблема ...

Используя парсер xml, я проанализировал некоторый атрибут и значение атрибута.

используя это, я получаю имя элемента:

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

Теперь, используя это, я получаю значение атрибута из XML:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
NSLog(@"found characters: %@ %@", currentElement,string);

предположим, мои xml-данные примерно такие ...

-<list>
−<ProductData HASH="838557843">
<id>1</id>
<productNumber>a91cc0f4c7</productNumber>
<name>Product 1</name>
<seoTitle>product-1</seoTitle>
<viewCount>0</viewCount>
<lowStock>0.0</lowStock>
<image>5e928bbae358c93caedf6115fa7d178b.jpg</image>
<dateCreated>2011-10-06T16:08:45</dateCreated>
<dateUpdated>2011-10-06T10:08:45</dateUpdated>
<isDummy>true</isDummy>
<isInventory>false</isInventory>
</ProductData>
-<ProductData HASH="681596439">
<id>2</id>
<productNumber>d8287e2e51</productNumber>
<name>Product 2</name>
<seoTitle>product-2</seoTitle>
−<description>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit,....</p>
</description>
<viewCount>0</viewCount>
<availableStock>100.0</availableStock>
<lowStock>0.0</lowStock>
<image>8bbd8dfff3cdd28285d07810a4fe7c32.jpg</image>
<basePrice>10.0</basePrice>
<costPrice>10.0</costPrice>
<height>1.0</height>
<width>1.0</width>
<depth>1.0</depth>
<weight>3.0</weight>
<status>A</status>
<quantityOrderMin>1.0</quantityOrderMin>
<productIsCall>false</productIsCall>
<quantityOrderMax>20.0</quantityOrderMax>
<priceByAttribute>false</priceByAttribute>
<dateCreated>2011-10-06T16:08:45</dateCreated>
<dateUpdated>2011-10-06T10:08:45</dateUpdated>
<isDummy>true</isDummy>
<isInventory>false</isInventory>
</ProductData>
</list>`

Теперь, когда я получу атрибут id, он будет хранить в массиве, а затем все атрибуты после первого id до следующего id Я хочу сохранить атрибут и его значение в словаре, когда я получит второй id, затем я хочу продолжить предыдущий процесс ... затем в соответствии со значением id я хочу отобразить значение в UIView или UITableView. это не обязательно, где я хочу показать его.

Мой вопрос: как я могу хранить данные в array и dictionary и отображать их в любое время в моем viewcontroller. Пожалуйста, помогите мне. это становится большой проблемой для меня. если вы можете, пожалуйста, дайте мне sample code в качестве примера. пожалуйста, пожалуйста, кто-нибудь, помогите мне ...

Заранее спасибо

1 Ответ

0 голосов
/ 13 октября 2011

Если вы измените свой XML на

<list>
 <Object>
     <id>1</id>
     <product>name</product>
     <image>imagename.jpg</image>
     <dateCreated>date</dateCreated>
     <productleft>10</productleft>
 </Object>

 <Object>
     <id>2</id>
     <product>name</product>
     <image>imagename.jpg</image>
     <dateCreated>date</dateCreated>
     <productleft>30</productleft>
 </Object>
</list>

или если ваш XML выглядит примерно так же, как и простой в использовании SAX-парсер (NSXMLParser, который вы использовали)В противном случае, если вы хотите придерживаться опубликованного вами XML, используйте синтаксический анализ в стиле DOM.

Вот код для XML после форматирования с использованием NSXMLParser.

// these are ivars
NSMutableArray * objectsArray;
NSMutableDictionary * productDict;
NSMutableString * currentString;

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"Object"])
    {
        objectsArray = [[NSMutableArray alloc] init];
        productDict = [[NSMutableDictionary alloc] init];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if(!currentString)
    {
        currentString = [[NSMutableString alloc] init];
    }
    [currentString appendString:string]; 
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"id"])
    {
        [productDict setObject:currentString forKey:@"id"];
        [currentString release],currentString = nil;
        return;
    }
    if([elementName isEqualToString:@"product"])
    {
        [productDict setObject:currentString forKey:@"product"];
        [currentString release],currentString = nil;
        return;
    }
    if([elementName isEqualToString:@"image"])
    {
        [productDict setObject:currentString forKey:@"image"];
        [currentString release],currentString = nil;
        return;
    }
    if([elementName isEqualToString:@"dateCreated"])
    {
        [productDict setObject:currentString forKey:@"dateCreated"];
        [currentString release],currentString = nil;
        return;
    }
    if([elementName isEqualToString:@"productleft"])
    {
        [productDict setObject:currentString forKey:@"productleft"];
        [currentString release],currentString = nil;
        return;
    }
    if([elementName isEqualToString:@"Object"])
    {
        [objectsArray addObject:productDict];
        [productDict release],productDict = nil;
    }
    [currentString release], currentString = nil;
}
...