URLからXMLファイルを取得すると、XMLファイルからすべての要素を解析してログファイルに表示できます。解析コードは次のようになります。
-(id) loadXMLByURL:(NSString *)urlString{
tweets = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;}
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"Products"]){
currentTweet = [egsBase alloc];}}
-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if([elementName isEqualToString:@"img"]){
currentTweet.img=[UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:currentNodeContent]]];}
if ([elementName isEqualToString:@"Products"]) {
[tweets addObject:currentTweet.img];
currentTweet = nil;
currentNodeContent = nil;}}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];}
解析にはクラス名を使用しますXmlParsing
。コントローラクラスでは、クラスファイルXmlParsing
を次のように実装していXmlParsing xmlparser;
ました。viewDidLoad()関数では、次のようなコードを使用します。
- (void)viewDidLoad{
[super viewDidLoad];
xmlParser = [[XMLParsing alloc] loadXMLByURL:@"http://images.com/Products.xml"];
UIImage *currentImage = [[xmlParser tweets] objectAtIndex:0];
customimage.image = currentImage;}
ここcustomimage
にUIImageViewのリファレンスがあります。問題は、最後の要素の値のみを取得して、ストーリーボードに接続されたUIImageViewに表示できることです(つまり、理解を深めるために、要素で使用する前の要素ではなく、最後の要素の画像のみが表示されます) 。これを解決する方法は?どこが間違っているのか。親切に私を提案してください。
XMLの構造
<Products>
<products id="1">
<img>http://images.com/images/Main_pic.png</img>
</products>
<products id="2">
<img>http://images.com/images/image1.png</img>
</products>
</Products>
私のNSLogは、XMLファイルを解析するために表示されます。
images <UIImage: 0x71529a0>
images <UIImage: 0x74a6750>
印刷して取得した画像を確認すると、現在の画像が次のように表示されます。
Current,<UIImage: 0x74a6750>
ここでは、現在の画像が前の要素ではなく最後の要素のみを示していることがわかります