Проблема TouchXML - PullRequest
       7

Проблема TouchXML

0 голосов
/ 30 июня 2011

У меня есть следующий 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.&#xD;
                 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?&# 
                &#xD;
                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?&#xD;
                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 ]

1 голос
/ 30 июня 2011

Если вы можете изменить свой XML-файл и сделать все теги категорий одинаковыми.Вы можете поместить все ... вместо ... и ....

Так что это будет довольно легко разобрать.Вам просто нужно создать класс категории, и все теги будут анализироваться автоматически, если у вас правильный код синтаксического анализа xml.

1 голос
/ 30 июня 2011
CXMLNode *node;
for(i=0; i<10 ; i++){
    NSString *xpath = [NSString stringWithFormat:@"//category%d/title", i]; 
    NSArray *title = [[node nodesForXPath:xpath] stringValue];
}

Используйте вышеуказанный код ..

0 голосов
/ 30 июня 2011

Код ниже дает вам словарь, где ключи - это заголовки, а данные - это ссылки.Конечно, если ваш 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]];
              } 
         }
}
0 голосов
/ 30 июня 2011
CXMLElement *element;
NSArray *titleItems = [[NSArray alloc] initWithArray:[element nodesForXPath:@"//category" error:nil]];  
for(CXMLElement *item in titleItems){
NSString *title = [[item selectSingleNode:@"title"] stringValue];

}

Примечание: узел категории должен повторяться .....

...