如何使用Objective-C中的NSXMLParser解析与使用utf-8不同的另一编码器编码的xml文件?

问题描述:

有没有办法使用NSXMLParser解析用windows-1254编码的xml文件?当我尝试时,didStartElement方法不被调用。如何使用Objective-C中的NSXMLParser解析与使用utf-8不同的另一编码器编码的xml文件?

代码是

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:webData]; 
XMLParser *parser = [[XMLParser alloc] initXMLParser: objectList]; 
[parser setReqType:reqType]; 
[xmlParser setDelegate:parser]; 
[xmlParser parse]; 

XML是

<?xml version="1.0" encoding="windows-1254" ?> 
<CANLIMACLAR> 
<CANLIMACLARROWS> 
<TARIH>19/10/2009 21:15</TARIH> 
<TAKIM1>Union Berlin</TAKIM1> 
<TAKIM2>Fürth</TAKIM2> 
<SONUC1>1</SONUC1> 
<SONUC2>2</SONUC2> 
<DK_DURUM>Maç Sonu</DK_DURUM> ... 
</CANLIMACLARROWS> ... 
</CANLIMACLAR> 
+0

您可以发布您的代码?也许是XML文件本身的序言? – 2009-10-23 09:16:39

+0

NSXMLParser * xmlParser = [[NSXMLParser alloc] initWithData:webData]; XMLParser * parser = [[XMLParser alloc] initXMLParser:objectList]; [解析器setReqType:reqType]; [xmlParser setDelegate:parser]; [xmlParser parse]; - - 19/10/2009 21:15联盟柏林 菲尔特 MAC鲜于 ... CANLIMACLARROWS> ... CANLIMACLAR> – crazywood 2009-10-23 09:30:12

我从XML数据删除<?xml version="1.0" encoding="windows-1254" ?>部分,然后我把它发送到XMLPARSER,所以没有问题了。

+0

然而,这不是一个修复 - 问题是数据不是XML,供应商需要修复它 – Mark 2011-08-27 20:41:16

不要忘记,如果解析()不返回,您可以检查parseError看看发生了什么:

if ([parser parse] == NO) 
{ 
    NSError *error = [parser parserError]; 
    NSString *readableMessage = [error localizedDescription]; 
    NSLog(@"Error occurred: %@\n", readableMessage); 
} 
+1

感谢您的建议,我实现了它,但我认为在“[parser parseError]”中缺少一个字符“ ,它必须是“[parser parserError]”。 – crazywood 2009-10-27 10:42:33

+0

你是对的 - 修好了。 – 2009-10-27 14:31:33