2013-03-27 157 views
0

我想解析一個xml文件,但我無法檢索到它的所有對象。xml解析目標c訪問屬性

我的XML是

<exam> 
<question s="1" a="2" m="1" x="1"> 
    <q>question</q> 
    <o p="">question</o> 
    <o p="">question</o> 
    <o p="">question</o> 
    <o p="">question</o> 

</question> 
<question s="2" a="1,3,5" m="3" p="1.2.jpg" x="1"> 
    <q>question</q> 
    <o p="">question</o> 
    <o p="">question</o> 
    <o p="">question</o> 
    <o p="">question</o> 
    <o p="">question</o> 
    <o p="">question</o> 
</question> 
</exam> 

我怎樣才能檢索到的所有數據,如 「S =」 2" 「和」 < .OP =>問題< ./o>」

+1

也許由[閱讀文檔(https://developer.apple.com/library/mac/#啓動文檔/可可/參考/基金/班/ NSXMLParser_Class /參考/的reference.html)?相信我,它*超級有用。* – 2013-03-27 21:51:11

+0

您的XML是有效的,所以問題出現在Objective-C代碼中,請將其發佈。 – 2013-03-27 21:54:09

+0

你好!你能把答案放在答案中,而不是放在問題體內!你還可以從標題中刪除「解決」!有關更多信息,請參閱http://meta.stackexchange.com/questions/172501/community-edit-request-solved-fixed-answered。感謝您幫助保持網站的一致性和清潔性! – 2013-04-27 03:06:55

回答

0

謝謝您的幫助。下面是我發現了一個朋友的幫助下,解決方案(對不起,我選擇不當的變量名):

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    currentElement = elementName; 
    if([elementName isEqualToString:@"item"]) 
    { 
     qes = [[Qes alloc] init]; 
     qes.s= [attributeDict objectForKey:@"s"]; 

    } 

} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if([currentElement isEqualToString:@"q"]) 
     [qes.question appendString:string]; 
    if([currentElement isEqualToString:@"o"]) 
    { 
     [qes.answers addObject:string]; 
    } 

} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"item"]) 
    { 
     [quests addObject:qes]; 

    } 
} 
-(void)parserDidEndDocument:(NSXMLParser *)parser 
{ 
    for (Qes *s in quests) { 
     NSLog(s.question); 
     NSLog(@"s-----"); 
     NSLog(s.s); 

     for (NSString *w in s.answers) { 
      NSLog(w); 

     } 

    } 

} 
+0

你可以接受你自己的答案;這將標記問題被接受,以便人們知道問題已經解決。 – ASGM 2013-05-06 13:18:57

+0

謝謝你的信息。我不知道。 – sando 2013-05-17 09:49:27

0

使用GDataXML &考慮xmlData將以XML字符串NSData表示。

GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData error:&error]; 

NSArray *dataArray = [doc nodesForXPath:@"//exam/question" error:nil]; 

    for (GDataXMLElement *element in dataArray) { 

     NSArray * question = [element elementsForName:@"s"]; 

     if (question.count > 0) { 
      GDataXMLElement *questionElement = (GDataXMLElement *) [question objectAtIndex:0]; 
      questionString = [questionElement stringValue]; 
     } 
} 

看到更多細節here

+0

謝謝你的回答。這對我幫助很大。 – sando 2013-05-06 12:59:48