XML для NSArray из NSDictionarys - PullRequest
       22

XML для NSArray из NSDictionarys

1 голос
/ 12 ноября 2011

У меня есть XML-файл в соответствии с этим:

<houses>
<house>
<title>123 Main St</title>
<address>123 Main St, Georgetown Washingon D.C.</address>
<photo>http://www.photo.com/images/1.jpg</photo>
<photo>http://www.photo.com/images/2.jpg</photo>
<photo>http://www.photo.com/images/3.jpg</photo> 
<photo>http://www.photo.com/images/4.jpg</photo>
</house>

<house>
<title>1234 Main St</title>
<address>1234 Main St, Georgetown Washingon D.C.</address>
<photo>http://www.photo.com/images/1.jpg</photo>
<photo>http://www.photo.com/images/2.jpg</photo>
<photo>http://www.photo.com/images/3.jpg</photo> 
<photo>http://www.photo.com/images/4.jpg</photo>
</house>

и нужен способ заполнить NSArray NSDictonarys информацией между тегами <house>.

Я нашел Синтаксический анализ XML-элемента "Category" в NSArray с NSDictionary , но, похоже, он не работает. Если у кого-нибудь есть какие-либо идеи, как это сделать, или лучший способ импортировать данные в мое приложение, и помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 12 ноября 2011

Только для MacOS:

Вот код:

NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"xml" ofType:@"xml"];
NSString *xml = [NSString stringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncoding error:nil];
NSXMLDocument *xmlDocument = [[[NSXMLDocument alloc] initWithXMLString:xml options:0 error:nil] autorelease];
NSMutableArray *array = [NSMutableArray array];

for (NSXMLElement *node in [xmlDocument.rootElement nodesForXPath:@"//house" error:nil])
{
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    NSMutableArray *photos = [NSMutableArray array];

    for (NSXMLElement *subNode in node.children)
{
        if ([subNode.name isEqualToString:@"photo"])
            [photos addObject:subNode.stringValue];
        else 
            [dict setObject:subNode.stringValue forKey:subNode.name];
    }

    [dict setObject:photos forKey:@"photos"];
    [array addObject:dict];
}

NSLog(@"%@", array);

А вот вывод:

(
{
    address = "123 Main St, Georgetown Washingon D.C.";
    photos =         (
        "http://www.photo.com/images/1.jpg",
        "http://www.photo.com/images/2.jpg",
        "http://www.photo.com/images/3.jpg",
        "http://www.photo.com/images/4.jpg"
    );
    title = "123 Main St";
},
    {
    address = "1234 Main St, Georgetown Washingon D.C.";
    photos =         (
        "http://www.photo.com/images/1.jpg",
        "http://www.photo.com/images/2.jpg",
        "http://www.photo.com/images/3.jpg",
        "http://www.photo.com/images/4.jpg"
    );
    title = "1234 Main St";
}
}
...