【发布时间】:2012-11-30 10:45:32
【问题描述】:
我需要用西班牙语解析 xml 文件(如果我无法控制生成方式)。解析部分工作得很好,但问题是当 xml 文件有特殊字符时,例如:
看点
什么时候解析我得到这个: 点睛之笔
我正在使用 CocoaXMLParser。你们有谁知道这是怎么处理的?
这是我的代码:
-(void)getRss
{
NSString *urlString=@"http://mysite.com/content.xml";
NSURL *url=[NSURL URLWithString:urlString];
NSURLRequest *rssRequest=[NSURLRequest requestWithURL:url];
self.contentConnection=[[NSURLConnection alloc]initWithRequest:rssRequest delegate:self startImmediately:YES];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
self.dataResponse = [NSMutableData data];
NSLog(@"didReceiveResponse");
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[_dataResponse appendData:data];
NSLog(@"didReceiveData");
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"didFailWithError");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"connectionDidFinishLoading ");
[self parseContent];
}
-(void)parseContent
{
NSString *response = [[NSString alloc] initWithData:_dataResponse encoding:NSUTF8StringEncoding];
NSLog(@"data received %@", response);
NSLog(@"parse content ");
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:_dataResponse];
parser.delegate = self;
[parser parse];
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
self.currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"categoriaNoticias"])
{
self.validXML=YES;
NSLog(@"es xml valido");
}
else
{
self.validXML=YES;
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (_validXML) {
if ([elementname isEqualToString:@"titulo"])
{
NSString *string=_currentNodeContent;
NSLog(@"titulo %@", string);
}
if ([elementname isEqualToString:@"link"])
{
NSLog(@"titulo %@", _currentNodeContent);
}
}
}
我会非常感谢任何指点
【问题讨论】:
-
按照标准,XML 必须以 UTF-8 编码。
-
@mvp:“XML 文档中的每个外部解析实体可能对其字符使用不同的编码。”来自w3.org/TR/REC-xml/#charencoding
-
我明白,但正如我提到的,我无法控制 xml 文件的创建,我需要与我一起工作
-
@Juan:文档有一些编码,可能是 latin-1。如果有错误或遗漏,也许在您阅读后补上?
-
@Juan:你的 XML 文件有什么编码?您如何接收它并将其提供给 XML 解析器?请出示相关代码。
标签: iphone ios ipad xml-parsing