我正在尝试解析包含阿拉伯语单词的XML文件,如下所示:
<NewsComponent>
<HeadLine>العلاجية</HeadLine>
</NewsComponent>
当我在NSXMLParser
委托上NSLog字符串时,它会打印出空字符串,即使我将数据解析为UITableView
,它也会显示空文本。
我在将数据传递给解析器之前将数据编码为UTF-8。
如何在不丢失标签HeadLine的内容的情况下解析XMl?
注释:
1。与英语相同的XML工作正常。
2。在任何浏览器中显示XML都会正确显示数据。
3。在解析NSString之前将NSData转换为NSString和NSLog-ing也正确显示xml。
<小时/> 修改我是如何做到的?
NSString *sURLREST = @"http://www.example.com/getXml";
NSURL *url = [NSURL URLWithString:sURLREST];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSURLResponse *response;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];
NSString* output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData* dataOutput = [output dataUsingEncoding: NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] dataOutput];
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if([sCurrentItem isEqualToString:@"HeadLine"])
{
[mutuableArray addObject:string];
// I am just adding the string value to a NSMutuableArray to bind it with the UITableView.
NSLog(@"%@",string);
}
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
sCurrentItem = elementName;
}
答案 0 :(得分:1)
您的错误在于parser:foundCharacters:
。您不能指望每个元素只调用一次该方法。它可能被多次调用。在每个元素(在parser:didStartElement:
)中第一次调用该方法之前,必须创建一个空的可变字符串,然后将新字符附加到该字符串。在调用parser:didEndElement:
之前,字符串不完整。
请参阅Apple的示例代码。他们做得很好。