【问题标题】:Parsing XML Storing into NSArray将 XML 存储解析为 NSArray
【发布时间】:2012-05-23 19:45:52
【问题描述】:

我正在尝试解析 XML 并将 XML 的一个元素中的 URL 存储到 NSArray 中。到目前为止,这是我的代码:

 NSURL *url = [NSURL URLWithString:@"http://www.316apps.com/LakesideDocs/podcasttrial.xml"];

   NSData *xmlData = [[NSMutableData alloc] initWithContentsOfURL:url];
   NSError *error;
   GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData 
                                                          options:0 error:&error];

   NSArray *channels = [doc.rootElement elementsForName:@"channel"];
   for (GDataXMLElement *channel in channels) {            


       NSArray *items = [channel elementsForName:@"item"];
       for (GDataXMLElement *item in items) {

           NSString *articlePoint = [item valueForChild:@"link"];
           NSArray *linkarray = [[NSArray alloc] initWithObjects:articlePoint, nil];

           NSLog(@"%@", linkarray);

       }

   }

对于我期望的 NSLog:

TabBarSample[40191:fb03] (
    (
    "http://domain.com/image1.jpg"
 ),
(
"http://domain.com/image2.jpg"
)
)

但我明白了:

TabBarSample[40191:fb03] (
"http://domain.com/image1.jpg"
)
TabBarSample[40191:fb03] (
"http://domain.com/image2.jpg"
)

我做错了什么?

【问题讨论】:

  • 我忍不住发布了一个指向我的自动化 XML 解析库的链接。没有递归,保持简单:ceasyxml.googlecode.com

标签: objective-c ios xml cocoa-touch nsarray


【解决方案1】:

每次循环都会创建一个新数组:

 NSArray *linkarray = [[NSArray alloc] initWithObjects:articlePoint, nil];

相反,您希望在 llop 之外使用 NSMutableArray 并在每个循环期间添加一个对象

   NSMutableArray *linkarray = [NSMutableArray array];
   NSArray *items = [channel elementsForName:@"item"];
   for (GDataXMLElement *item in items) {

       NSString *articlePoint = [item valueForChild:@"link"];
       [linkarray addObject:articlePoint];

       NSLog(@"%@", linkarray);

   }

如果增加的数组让你感到困惑,你应该把 NSLog 放在 for 循环之后:

   NSMutableArray *linkarray = [NSMutableArray array];
   NSArray *items = [channel elementsForName:@"item"];
   for (GDataXMLElement *item in items) {

       NSString *articlePoint = [item valueForChild:@"link"];
       [linkarray addObject:articlePoint];
   }

   NSLog(@"%@", linkarray);
   NSLog(@"count: %d", [linkarray count]);

【讨论】:

  • 这有点工作。我现在最终得到了两个不同的 NSLog。一个只有第一个“链接”值 URL,一个同时具有。我也设置了NSLog(@"TheCountIs%i", [linkarray count]);,控制台返回:TheCountIs1 TheCountIs2 这正常吗?
  • 确定:在每一步中,您都在添加一个对象,因此计数会增加一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多