• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

objective-c - 使用 NSXMLParser 问题解析

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:10:04 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试解析来自 Web 服务器的响应。

我的解析器如下:

#import "XMLParser.h"
#import "AppDelegate.h"
#import "Child.h"

@implementation XMLParser

- (XMLParser *) initXMLParser {

     self = [super init];

    if(self)
    {
        appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    }
    return self;
}

- (void)parserNSXMLParser *)parser didStartElementNSString *)elementName 
  namespaceURINSString *)namespaceURI qualifiedNameNSString *)qualifiedName 
    attributesNSDictionary *)attributeDict 
{
    if([elementName isEqualToString"GetKidsResult"])
    {
        // initialize the array
        if(!appDelegate.children)
        {
            appDelegate.children = [[NSMutableArray alloc] init];

        }

    }

    else if([elementName isEqualToString"a:KeyValueOfintKidf4KEWLbb"])
    {
        if(!aChild)
        {
        //Initialize the child.
            aChild = [[Child alloc] init];
        }
    }

    NSLog(@"rocessing Element: %@", elementName);
}

- (void)parserNSXMLParser *)parser foundCharactersNSString *)string { 

    if(!currentElementValue) 
    {
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    }
    else
    {
        [currentElementValue appendString:string];
    }

}

-(void)parserNSXMLParser *)parser didEndElementNSString *)elementName namespaceURINSString *)namespaceURI qualifiedName:(NSString *)qName
{
    //NSLog(@"El name: %@", elementName);

    if([elementName isEqualToString"GetKidsResult"])

        NSLog(@"end of xml");
        return;    

    if([elementName isEqualToString"a:KeyValueOfintKidf4KEWLbb"])
    {
        NSLog(@"Found end of child");

        [appDelegate.children addObject:aChild];

        aChild = nil;
    }

    else if([elementName isEqualToString"a:Key"])
    {
        NSLog(@"Found key");
    }

    else if([elementName isEqualToString"b:CheckedIn"])
    {
        NSLog(@"Found checkedIn");
    }

    else if([elementName isEqualToString"b:FirstName"])
    {
        NSLog(@"Found firstname");
    }

    else if([elementName isEqualToString"b:Gender"])
    {
        NSLog(@"found gender");
    }

    else if([elementName isEqualToString"b:Id"])
    {
        NSLog(@"found id");
    }

    else if([elementName isEqualToString"b:IsOnTour"])
    {
        NSLog(@"found isontour");

    }

    else if([elementName isEqualToString:@"bastName"])
    {
        NSLog(@"found lastname");
    }

    else if([elementName isEqualToString:@"b:GroupName"])
    {
        NSLog(@"found groupname");
    }

    currentElementValue = nil;

}
@end

现在我只是想看看它是否找到了数据......然后我会保存它......
但是在我的 didEndElement 中,除了
if([elementName isEqualToString:@"GetKidsResult"])

我的 xml 响应示例:
            <a:KeyValueOfintKidf4KEWLbb>
            <a:Key>XXXXXXXX</a:Key>
            <a:Value xmlns:b="http://schemas.datacontract.org/2004/07/DayCare.DB.DTO">
                <b:CheckedIn>false</b:CheckedIn>
                <b:FirstName>XXXXXXX</b:FirstName>
                <b:Gender>Male</b:Gender>
                <b:Id>XXXXXXXX</b:Id>
                <b:IsOnTour>false</b:IsOnTour>
                <bastName>XXXXXX</bastName>
                <bhoto>XXXXXXXX</bhoto>
                <b:GroupName>XXXXX</b:GroupName>
            </a:Value>
        </a:KeyValueOfintKidf4KEWLbb>

知道为什么它没有其他元素吗?
我以前从未做过网络服务之类的,所以解释越简单越好......

当我 NSLog 元素时,我可以看到它正确地通过了 xml 文档
NSLog(@"rocessing Element: %@", elementName);

例子:
Processing Element: a:KeyValueOfintKidf4KEWLbb
Processing Element: a:Key
Processing Element: a:Value
Processing Element: b:CheckedIn
Processing Element: b:FirstName
Processing Element: b:Gender
Processing Element: b:Id
Processing Element: b:IsOnTour
Processing Element: bastName
Processing Element: bhoto
Processing Element: b:GroupName



Best Answer-推荐答案


didEndElement ,尝试改变这部分:

if([elementName isEqualToString:@"GetKidsResult"])

    NSLog(@"end of xml");
    return;  

到:
if([elementName isEqualToString:@"GetKidsResult"])
{
    NSLog(@"end of xml");
    return;  
}

没有将这两个语句放在 if 之后在一个街区中,return每次都被执行。

关于objective-c - 使用 NSXMLParser 问题解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096563/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap