0

iPhone用(Cydia用)のダイナミックライブラリを作成しており、TouchXMLを使用してXMLを解析しようとしています。このメソッドを呼び出すと

+(NSArray *)initWithXMLfromData:(NSData *)data withRootElement:(NSString *)rootElement{
NSError *err;
CXMLDocument *parser = [[CXMLDocument alloc] initWithData:data options:0 error:&err];
NSArray *xml = [parser nodesForXPath:[NSString stringWithFormat:@"//%@", rootElement] error:&err];
if (err) {
    NSLog(@"%@", err);
}
return xml;
} 

私のアプリから、デバッガーからこのエラーが発生します

Assertion failure in -[CXMLElement description], /Users/macuser/Desktop/c/parser/TouchXML-master/Source/CXMLElement.m:287

これを使ってメソッドを呼んでいます

NSArray *xml = [XMLParse initWithXMLfromData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://a-cstudios.com/xml.xml"]] withRootElement:@"root"];
NSLog(@"%@", [xml objectAtIndex:0]);

XMLはこのようにレイアウトされています

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
    <val>34</val>
</root>
4

1 に答える 1

1

私はドキュメントの例とあなたのXMLで遊んでいましたが、あなたがXMLを変更したようです。次のコードは、質問に投稿したxmlで機能しました。

NSMutableArray *res = [[NSMutableArray alloc] init];

CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://a-cstudios.com/xml.xml"]] options:0 error:nil] autorelease];
NSArray *nodes = NULL;

//  searching for val nodes
nodes = [doc nodesForXPath:@"//val" error:nil];

for (CXMLElement *node in nodes) {
    NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
    int counter;
    for(counter = 0; counter < [node childCount]; counter++) {
        //  common procedure: dictionary with keys/values from XML node
        [item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]];
    }

    [res addObject:item];
    [item release];
}

//  print  results
NSLog(@"%@", res);
[res release];
于 2013-03-23T01:15:09.447 に答える