2010-10-22 3 views
0

я, имеющий выходной XML, который выглядит примерно так,как разобрать XML

<?xml version="1.0"?> 
<root> 
<apple><apple1>A</apple1></apple> 
    <ball><ball1>B</ball1></ball> 
    <cat><cat1>C</cat1></cat> 
    <dog><dog1>D</dog1></dog> 
    <ele><ele1>E</ele1></ele> 
<root> 

я использую NSXMLParser, им путать, это TGIS в гуд структуры XML?> // во-вторых, я не KNW как для синтаксического анализа этого xml, я имею в виду, как я должен писать условие в парсере didSTart и didEndElement ???

Я не могу правильно перемещаться по каждому узлу, от яблока до элемента. Я просто хочу назначить возвращаемое значение say apple строке. одинаково для каждого узла.

Я так смущен, если/else условие.

Предложения всегда ценятся

приветы

ответ

1

Вы должны иметь ровно один корневой элемент, например, так:

<?xml version="1.0"?> 
<root> 
    <apple><apple1>A</apple1></apple> 
    <ball><ball1>B</ball1></ball> 
    <cat><cat1>C</cat1></cat> 
    <dog><dog1>D</dog1></dog> 
    <ele><ele1>E</ele1></ele> 
</root> 

Я не знаю, о специфике синтаксического анализатора, которые вы используете , но это внутренняя проблема XML.

+0

ohk, вот почему я могу перейти только к одному узлу .. так что ur xml-формат должен быть правильным, корневой тег сверху и снизу.?/Thank loannis – iscavengers

+0

Исправить. XML необходимо работать. Рад помочь. –

+0

Что относительно условия if/else? как написать это для каждого тега? thank loannis karamdimas – iscavengers

0

Вы можете использовать ниже пример кода.


resultArray = [[NSMutableArray alloc] init]; 
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:webData]; 
[parser setDelegate:self]; 
[parser parse]; 

делегат методы для анализа данных XML


- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ 
NSLog(@"error occured %@",parseError); 
} 

- (void)parserDidStartDocument:(NSXMLParser *)parser{ 
NSLog(@"Did Start Document"); 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{ 
self.currentElement = elementName; 
if([elementName isEqualToString:@"root"] && !itemDictionary){ 
    self.itemDictionary = [[NSMutableDictionary alloc] init]; 
} 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
[itemDictionary setObject:string forKey:currentElement]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
if([elementName isEqualToString:@"root"] && itemDictionary)){ 
    [resultArray addObject:itemDictionary]; 
    currentItem = nil; 
} 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser{ 
NSLog("After parsing : %@", resultArray); 
} 
+0

привет спасибо jfalexvijay за ответ может у плз рассказать мне, что такое itemDictionary и currentItem ??? и как я могу передать returend attrubute значения в NSSTRing, еще раз спасибо за ответ – iscavengers

0

itemDictionary является NSMutableDictionary.

Я отредактировал свой предыдущий ответ. (currentItem - itemDictionary). В этом примере кода itemDictionary должен хранить все значения с помощью ключа (при анализе данных).

itemDictionary -? {
apple1 = А
ball1 = В
cat1 = С
dog1 = D
ele1 = Е
}


//-------------------------- 
< XML версия = "1.0">
< корень>
< apple id = '10 '> < apple1> A </apple1> </яблоко>
< мяч> < ball1> B </ball1> </шар>
< кот> < cat1> C </cat1> </кошка>
< собака> < dog1> D </dog1 > </собака>
< Эле> < ele1> E </ele1> </Ele>
< корень>

В методе didStartElement вы должны использовать ниже пример кода.


if([elementName isEqualToString:@"apple"]){ 
    NSString *attributeValue = [attributeDict objectForKey:@"id"]; 
    NSLog("Attribute value : %@", attributeValue); 
} 

Надеюсь, это поможет вам.

Смежные вопросы