【问题标题】:xml parsing in objective c accessing attributes目标c中的xml解析访问属性
【发布时间】:2013-03-27 21:48:22
【问题描述】:

我正在尝试解析一个 xml 文件,但我无法检索其中的所有对象。

我的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"”和“<.o p="">question/o>”等所有数据

【问题讨论】:

  • 也许从reading the documentation开始?相信我,它非常有用。
  • 你的XML是有效的,所以问题出在Objective-C代码中,请贴出来。
  • 您好!您能否将答案放在答案中,而不是将其放在问题正文中!您能否也从标题中删除“已解决”!有关更多信息,请参阅meta.stackexchange.com/questions/172501/…。感谢您帮助网站尽可能保持一致和整洁!

标签: objective-c xml parsing


【解决方案1】:

使用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

【讨论】:

  • 感谢您的回答。这对我帮助很大。
【解决方案2】:

感谢您的帮助。这是我在朋友的帮助下找到的解决方案(抱歉变量名选择不当):

-(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);

        }

    }

}

【讨论】:

  • 您可以接受自己的答案;这会将问题标记为已接受,以便人们知道问题已得到解决。
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 2011-10-11
  • 2015-05-31
  • 2011-05-13
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多