私はいくつかのxmlを解析する必要があるiPhoneプロジェクトに取り組んでいます。xml には、デフォルトの名前空間が含まれる場合と含まれない場合があります。デフォルトの名前空間を使用する場合に備えて、xml を解析する方法を知る必要があります。書き込み xml を読み取る必要があるため、KissXML の使用に傾いていますが、提案は受け付けています。
これは私のコードです:
NSString *content = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]
pathForResource:@"bookstore" ofType:@"xml"] encoding:NSUTF8StringEncoding error:nil];
DDXMLDocument *theDocument = [[DDXMLDocument alloc] initWithXMLString:content options:0 error:nil];
NSArray *results = [theDocument nodesForXPath:@"//book" error:nil];
NSLog(@"%d", [results count]);
この xml で期待どおりに動作します。
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
</book>
</bookstore>
しかし、xml に名前空間がある場合、次のように動作しなくなります。
<?xml version="1.0" encoding="UTF-8"?>
<bookstore xmlns="[INSERT RANDOM NAMESPACE]">
<book category="COOKING">
<title lang="en">Everyday Italian</title>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
</book>
</bookstore>
もちろん、文字列を前処理して xmlns を削除することもできますが、それは一種の醜いハックのように感じます。これを処理する適切な方法は何ですか?