Проблема TouchXML
У меня есть следующий XML, который мне нужно проанализировать с помощью TouchXML.
<?xml version="1.0"?>
<categories>
<category0>
<title>Alcoholic Drinks</title>
<description>Buy beers, wines, sprits and champagne from the top online alocholic drink stores.
Whatever your tipple you are sure to find a drinks supplier from our top shops below:
</description>
<status>1</status>
<popularStatus></popularStatus>
<order></order>
<link>alcoholic-drinks</link>
<id>1</id>
</category0>
<category1>
<title>Art and Collectibles</title>
<description>Are you looking to buy contemporary or fine art, or do you prefer to make your own artwork?&#

Whether type of artwork or craft materials you are looking for, you are certain to find one of the shops below more than helpful:
</description>
<status>1</status>
<popularStatus></popularStatus>
<order></order>
<link>art-and-collectibles</link>
<id>2</id>
</category1>
<category2>
<title>Auctions</title>
<description>Are you looking for the UK's biggest and best Auction Sites?
The team at safebuyer.co.uk have scoured the web to find the UK's favourite auctions, so why wait, start your bidding now!
</description>
...
...
...
Я думаю создать две петли из корневого узла, чтобы получить заголовок и ссылку, но не могу понять, как это сделать. Кто-нибудь может помочь, пожалуйста.
4 ответа
CXMLNode *node;
for(i=0; i<10 ; i++){
NSString *xpath = [NSString stringWithFormat:@"//category%d/title", i];
NSArray *title = [[node nodesForXPath:xpath] stringValue];
}
Используйте приведенный выше код
Если вы можете изменить свой XML-файл и сделать все теги категории одинаковыми. Вы можете поставить все... а не... и....
Так что это было бы довольно легко разобрать. Вам просто нужно создать класс категории, и все теги будут анализироваться автоматически, если у вас правильный код синтаксического анализа xml.
CXMLElement *element;
NSArray *titleItems = [[NSArray alloc] initWithArray:[element nodesForXPath:@"//category" error:nil]];
for(CXMLElement *item in titleItems){
NSString *title = [[item selectSingleNode:@"title"] stringValue];
}
Примечание: узел категории должен повторяться.....
Код ниже дает вам словарь, где ключи - это заголовки, а данные - это ссылки. Конечно, если ваш XML-документ "большой", это не лучший способ сделать это.
CXMLDocument *doc = [[[CXMLDocument alloc] initWithXMLString:theXML options:0 error:nil] autorelease];
NSArray *categories = nil;
NSMutableDictionary* results = nil;
categories = [doc nodesForXPath:@"/categories/*[starts-with(name(), 'category')]" error:nil];
if (categories != nil && [categories count] > 0)
{
results = [NSMutableDictionary dictionaryWithCapacity:[categories count]];
for (CXMLElement *category in categories)
{
NSArray* titles = [category elementsForName:@"title"];
if ([titles count] >0)
{
NSArray* links = [category elementsForName:@"link"];
[result setObject:([links count]>0?[[links objectAtIndex:0] stringValue]:nil;
forKey:[[titles objectAtIndex:0] stringValue]];
}
}
}