我正在尝试解析网址中包含&
的网址:
ViewArticle.dbml?DB_OEM_ID=1800&ATCLID=3664162
..但是使用NSXMLParser,我得到的只是1800ATCL
。它完全忽略了&
。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if (qName) {
elementName = qName;
}
if ([elementName isEqualToString:@"title"]) {
self.contentOfCurrentNewsProperty = [NSMutableString string];
}else if ([elementName isEqualToString:@"link"]){
self.contentOfCurrentNewsProperty = [NSMutableString string];
}else {
self.contentOfCurrentNewsProperty = nil;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (qName) {
elementName = qName;
}
_currentElement = elementName;
if ([elementName isEqualToString:@"title"]) {
self.currentNewsObject.title = self.contentOfCurrentNewsProperty;
} else if ([elementName isEqualToString:@"link"]){
self.currentNewsObject.link = self.contentOfCurrentNewsProperty;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (self.contentOfCurrentNewsProperty) {
[self.contentOfCurrentNewsProperty appendString:string];
}
}
有什么想法吗?感谢
修改:我做了更多测试,并且<?xml version="1.0" encoding="windows-1252"?>
行
是什么搞砸了,但这是嵌入在xml文件中,以任何方式解决它?**
答案 0 :(得分:2)
感谢你们的帮助,我能够使用
NSData *myData = [NSData dataWithContentsOfURL:URL];
NSString *myStr = [[NSString alloc] initWithData:myData encoding:NSWindowsCP1252StringEncoding];
myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1252\"" withString:@""];
NSLog(@"my str is %@", myStr);
NSData* aData = [myStr dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:aData];
现在一切正常,再次感谢。
答案 1 :(得分:1)
(dbr:原始海报使用的是NSXMLParser,而非NSXMLDocument,因此没有setCharacterEncoding
方法可供他覆盖。)
OP:为了测试你的情况,我写了一个简单的命令行实用程序,它使用NSXMLParser来解析带有<?xml version="1.0" encoding="windows-1252"?>
处理指令的XML文档。解析总是失败,错误代码是31,对应于枚举NSXMLParserUnknownEncodingError
。
要解决此问题,您可能需要预处理输入数据。这样做的一种方法可能是使用[NSString stringWithCString:yourCstring encoding:NSWindowsCP1252StringEncoding]
,其中yourCstring
是包含XML的标准C char*
。然后,您可以删除<?xml version="1.0" encoding="windows-1252"?>
处理指令,将NSString转换为NSData,并将其传递给NSXMLParser。
答案 2 :(得分:0)
也许您可以使用setCharacterEncoding
的setCharacterEncoding:
将接收器的字符编码设置为encoding,
- (void)setCharacterEncoding:(NSString *)encoding
参数:
编码
指定编码的字符串;它必须与IANA字符集的名称匹配。有关有效编码说明符的列表,请参阅http://www.iana.org/assignments/character-sets。
通常,编码在处理的文档的XML声明中指定,但可以随时设置。如果指定的编码与实际编码不匹配,则解析文档可能会失败。