Разбор простого XML из строки в Какао? - PullRequest
2 голосов
/ 01 июня 2010

У меня есть простой XML, и мне нужно получить first ' id ' из списка puid. Я нашел много примеров, но ни один из них не делает этого из-за пространства имен. Как получить id как NSString ?

PS: Я на Mac.

<genpuid songs="1" xmlns:mip="http://musicip.com/ns/mip-1.0#">
  <track file="/htdocs/test.mp3" puid="0c9f2f0e-e72a-c461-9b9a-e18e8964ca20">
    <puid-list>
      <puid id="0c9f2f0e-e72a-c461-9b9a-e18e8964ca20"/>
    </puid-list>
  </track>
</genpuid>

1 Ответ

8 голосов
/ 01 июня 2010

Вы должны использовать NSXMLParser. Создайте экземпляр в своем коде и скажите, чтобы он проанализировал:

NSData * XMLData = [myXMLString dataUsingEncoding:NSUnicodeStringEncoding];
NSXMLParser * parser = [[NSXMLParser alloc] initWithData:XMLData];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:YES]; // if you need to
[parser parse]; // start parsing

тогда вам нужно реализовать методы NSXMLParserDelegate для получения обратных вызовов при разборе:

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

    /* handle namespaces here if you want */

    if([elementName isEqualToString:@"puid"]){
         NSString * ID = [attributeDict objectForKey:@"id"];
         // use ID string, or store it in an ivar so you can access it somewhere else
    }
}

Замечания по обработке пространств имен:

Если заданы пространства имен, elementName - это полное имя, поэтому может иметь префикс (например, mip:puid). Если вы на Mac, NSXMLNode имеет методы класса удобства, localNameForName: и prefixForName: чтобы получить две части строки.

Кроме того, вам могут потребоваться NXXMLParser методы делегата parser:didStartMappingPrefix:toURI: и parser:didEndMappingPrefix:.

Обратите внимание, что имена, возвращаемые NSXMLParser, в точности совпадают с именами строки (относительно того, имеют ли они префикс). Так что атрибут редко называют mip:id, но если вы хотите быть устойчивым, вам также необходимо проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...