请有人帮助我。我遇到了大麻烦......现在我的问题是......
使用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
中显示值{1}}。它不是我想要展示它的必要条件。
我的问题是如何在array
和dictionary
中存储数据,并随时在viewcontroller
中显示。请帮我。它对我来说变得很麻烦。如果可以,请以sample code
为例。请任何人帮助我......
先谢谢
答案 0 :(得分:0)
如果您将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样式解析。
以下是使用NSXMLParser格式化后的XML代码。
// 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;
}