TBXML
を使用してXMLファイルを解析しようとしています。ただし、このパーサにはエラーチェックが組み込まれていないため、要素が存在しない場合はクラッシュします。私のXMLファイルの解析方法は次のとおりです。何かが無かどうかを確認する良い方法は?
TBXML *XML = [[TBXML tbxmlWithXMLData:myxmlfile] retain];
if (XML.rootXMLElement) {
TBXMLElement *XMLRoot = XML.rootXMLElement;
if ([TBXML childElementNamed:@"blah" parentElement:XMLRoot]) {
TBXMLElement *Blah = [TBXML childElementNamed:@"blah" parentElement:XMLRoot];
if ([TBXML childElementNamed:@"stuff" parentElement:Blah]) {
TBXMLElement *Item = [TBXML childElementNamed:@"item" parentElement:Blah;
if ([TBXML childElementNamed:@"stuff:blah" parentElement:Item]) {
TBXMLElement *something = [TBXML childElementNamed:@"stuff:blah" parentElement:Item];
NSString *Something = [TBXML textForElement:something];
//do something here...
}
else {
[self showFetchError];
[XML release];
return;}
} else {
[self showFetchError];
[XML release];
return;}
} else {
[self showFetchError];
[XML release];
return;}
} else {
[self showFetchError];
[XML release];
return;
}
ご覧のとおり、各項目に対して2回コールしています。それは私には大きなオーバーヘッドの浪費のようです。私が今やっていることをすることなく、どのようにしても各項目の同じ検証を行うことができますか?列挙子を使用して
BOOL success = NO;
TBXML *XML = [[TBXML tbxmlWithXMLData:myxmlfile] retain];
if (XML.rootXMLElement) {
TBXMLElement *XMLRoot = XML.rootXMLElement;
if ([TBXML childElementNamed:@"blah" parentElement:XMLRoot]) {
TBXMLElement *Blah = [TBXML childElementNamed:@"blah" parentElement:XMLRoot];
if ([TBXML childElementNamed:@"stuff" parentElement:Blah]) {
TBXMLElement *Item = [TBXML childElementNamed:@"item" parentElement:Blah;
if ([TBXML childElementNamed:@"stuff:blah" parentElement:Item]) {
success = YES;
TBXMLElement *something = [TBXML childElementNamed:@"stuff:blah" parentElement:Item];
NSString *Something = [TBXML textForElement:something];
//do something here...
}
}
}
}
if (!success) {
[self showFetchError];
[XML release];
return;
}
更新バージョン:
を。 –
私は別の可能な解決策で自分の答えを更新しました。 – Eimantas
このソリューションでは急いで多くの更新が行われましたか?今それはコンパイルする必要があります! – Eimantas