NSString с XML в NSArray с NSDictionary - PullRequest
1 голос
/ 19 октября 2010

У меня есть небольшая проблема, которую я не могу решить.У меня есть страница XML со следующим содержанием:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfCategory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://api.tradera.com">
  <Category Id="1612" Name="Category 1">
    <Category Id="161213" Name="Category 1 subcat 1">
      <Category Id="340761" Name="Category 1, subcat 1, subcat 1" />
      <Category Id="340761" Name="Category 1, subcat 1, subcat 2" />
      <Category Id="340761" Name="Category 1, subcat 1, subcat 3" />
      <Category Id="340761" Name="Category 1, subcat 1, subcat 4" />
      <Category Id="340761" Name="Category 1, subcat 1, subcat 5" />
    </Category>
    <Category Id="161213" Name="Category 1 subcat 2"></category>
    <Category Id="161213" Name="Category 1 subcat 3">
      <Category Id="340761" Name="Category 1, subcat 3, subcat 1" />
    </category>
  </Category>
  <Category Id="1612" Name="Category 1">
    [...]
  </category>
</ArrayOfCategory>

Что я хочу сделать, это преобразовать это в массив со словарями.Таким образом, это должен быть массив с ключом 0 = dictorionary с элементами Id, Name и subcats.Subcats должен быть массивом с теми же ключами.

Пока у меня есть следующий код:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self startParsing];
}

- (void)startParsing {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"categories" ofType:@"xml"];

    NSData *xmlData = [[NSData alloc] initWithContentsOfFile:path];
    NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease];
    [parser setDelegate:self];
    [parser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    NSLog(@"Started %@, attribute: %@", elementName, attributeDict);
}

Но я не могу понять, как создать этот массив, используя NSXMLParser,какие-либо предложения?

С наилучшими пожеланиями, Пол Пилен

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

Небольшая библиотека, позволяющая легко конвертировать XML в NSDictionary:

https://github.com/bcaccinolo/XML-to-NSDictionary

Веселись!

2 голосов
/ 26 октября 2010

Как уже говорилось в чате, вам нужно будет отследить, на каком уровне вы находитесь внутри

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    NSLog(@"Started %@, attribute: %@", elementName, attributeDict);
}

раздел. Возможно использовать глобальный ивар внутри этого?

...