NSXMLParserErrorDomain错误31 [英] NSXMLParserErrorDomain error 31

查看:53
本文介绍了NSXMLParserErrorDomain错误31的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

http://www.cbr.ru/scripts检索xml请求时出现此错误/XML_daily.asp

这样的XML代码:

<?xml version="1.0" encoding="windows-1251" ?>
<ValCurs Date="01.03.2011" name="Foreign Currency Market">
<Valute ID="R01010">
    <NumCode>036</NumCode>
    <CharCode>AUD</CharCode>
    <Nominal>1</Nominal>
    <Name>Австралийский доллар</Name>
    <Value>29,3508</Value>
</Valute>
<Valute ID="R01020A">
    <NumCode>944</NumCode>
    <CharCode>AZN</CharCode>
    <Nominal>1</Nominal>
    <Name>Азербайджанский манат</Name>
    <Value>36,3374</Value>
</Valute>

我的代码是:

-(void)parserDidStartDocument:(NSXMLParser *)parser
{

 [articles removeAllObjects];
} 

-(void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
    currentElement = elementName;
    if ([elementName isEqualToString:@"ValCurs"]) {
        itemActive = YES;
        currentValute = [[NSMutableString alloc]init];
        currentNumCode = [[NSMutableString alloc]init];
        currentCharCode = [[NSMutableString alloc]init];
        nominal = [[NSMutableString alloc]init];
        currentName = [[NSMutableString alloc]init];
        currentValue = [[NSMutableString alloc]init];
    }
    }

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if (itemActive) {
        NSString *fixedString = [string     stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if ([currentElement isEqualToString:@"Valute"]) 
            [currentValute appendString:fixedString];
        if ([currentElement isEqualToString:@"NumCode"]) 
            [currentNumCode appendString:fixedString];
        if ([currentElement isEqualToString:@"CharCode"]) 
            [currentCharCode appendString:fixedString];
        if ([currentElement isEqualToString:@"Nominal"]) 
            [nominal appendString:fixedString];
        if ([currentElement isEqualToString:@"Name"])
            [currentName appendString:fixedString];
        if ([currentElement isEqualToString:@"Value"])
            [currentValue appendString:fixedString];


}       
}

-(void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
    if ([elementName isEqualToString:@"ValCurs"]) {
        NSDictionary *record = [NSDictionary dictionaryWithObjectsAndKeys:
                                currentValute,@"Valute",
                                currentNumCode,@"NumCode",
                                currentCharCode,@"CharCode",
                                nominal,@"nominal",
                                currentName,@"Name",
                                currentValue,@"Value",
                                nil];
        [articles addObject:record];
        [currentNumCode release];
        [currentCharCode release];
        [currentValute release];
        [nominal release];
        [currentName release];
        [currentValue release];
        itemActive = NO;
    }
    }

-(void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"%@",articles);
//text.text = (@"%@",currentCharCode);
}

-(void)retrieveXML:(id)sender
{
    [parser parse];
}

........

- (void)viewDidLoad {
    [super viewDidLoad];
    articles = [[NSMutableArray alloc]init];
    NSString *myURL = [NSString     stringWithFormat:@"http://www.cbr.ru/scripts/XML_daily.asp"];

    NSURL *url = [NSURL URLWithString:myURL];
    //NSString *urla = [NSString stringWithContentsOfURL:url     encoding:NSUTF8StringEncoding error:nil];
    parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
    parser.delegate = self;
    [self createUI];
} 

从NSXMLParser参考-NSXMLParserUnknownEncodingError = 31.也许我需要对NSWindowsCP1251StringEncoding使用编码才能解决问题?

From NSXMLParser reference -NSXMLParserUnknownEncodingError = 31. May be i need use encoding to NSWindowsCP1251StringEncoding for solve problem ?

推荐答案

NSXMLParserUnknownEncodingError = 31当文档编码未知时发生.

NSXMLParserUnknownEncodingError = 31 occurs when document encoding is unknown.

尝试一下:

NSString *myStr = [[NSString alloc] initWithData:myData encoding:NSWindowsCP1251StringEncoding];
myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1251\"" withString:@""];


NSData* aData = [myStr dataUsingEncoding:NSUTF8StringEncoding];


NSXMLParser *parser = [[NSXMLParser alloc] initWithData:aData];

这篇关于NSXMLParserErrorDomain错误31的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆