iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
XMLデータを操作するAPIに、DOM(Document Object Model)とSAX(Simple API for XML)があるが、これに対応するCocoaのクラスがNSXMLDocumentとNSXMLParserだ。ただし、iOSではNSXMLDocumentが利用できない。iOSでDOMを使用したい場合はlibxml2を利用する事になる。
XMLデータからエレメント名と値を取得する例は、以下のとおり。
ビュー・コントローラをNSXMLParserDelegateに対応させる。
@interface ViewController : UIViewController
@property (strong, nonatomic) NSString *elementName;
@end
指定されたURLのXMLデータを読み込み、エレメントとそれの値を見つけたらデバッグ出力する例だ。
@implementation ViewController
@synthesize elementName = _elementName;
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *requestString = [NSString stringWithString:@"http://www.kyuden.co.jp/power_usages/xml/electric_power_usage20120304.xml"];
NSURL *url = [NSURL URLWithString:requestString];
[self parseXMLFile:url];
}
- (void)parseXMLFile:(NSURL *)url
{
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
if (elementName) {
NSLog(@"element: %@", elementName);
self.elementName = elementName;
}
}
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if (self.elementName) {
self.elementName = nil;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ((self.elementName)
&& (![self.elementName isEqualToString:@""])
&& (string)) {
NSLog(@"char: %@", string);
}
}
@end
これ以上については著者も調査中なので、機会があれば次回で。