Iphone 从XML到NSdictionary再到plist
嗨,伙计们,我有点奇怪的问题。我正在使用一个简单的XML到NSDictionary转换器 但是如果打印NSDictionary,我可以看到节点的文本值,但是如果我将其存储在plist中,文本节点将没有任何字符串值。请参见附加图像 这是plist的截图 这是密码Iphone 从XML到NSdictionary再到plist,iphone,ios,plist,nsdictionary,nsxmlparser,Iphone,Ios,Plist,Nsdictionary,Nsxmlparser,嗨,伙计们,我有点奇怪的问题。我正在使用一个简单的XML到NSDictionary转换器 但是如果打印NSDictionary,我可以看到节点的文本值,但是如果我将其存储在plist中,文本节点将没有任何字符串值。请参见附加图像 这是plist的截图 这是密码 NSURL * URL = [[NSURL alloc]initWithString:@"rss feed link "]; NSData * data = [[NSData alloc] initWithContentsOfU
NSURL * URL = [[NSURL alloc]initWithString:@"rss feed link "];
NSData * data = [[NSData alloc] initWithContentsOfURL:URL];
NSString *testXMLString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
// Parse the XML into a dictionary
NSError *parseError = nil;
NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:testXMLString error:&parseError];
NSString * filepath = [self dataFilePathwithFilename:[NSString stringWithFormat:@"TEST.plist"]];
[xmlDictionary writeToFile:filepath atomically:YES];
// Print the dictionary
NSLog(@"%@", xmlDictionary);
我认为您的
plist
文件没有空值。您只是没有考虑第一个图像中突出显示文本中的新行字符(“\n\thttp://wordpress.org/?v=3.0.1“
)
验证这一点的一个简单方法是使用文本编辑器打开它。你会发现这些值就在那里。也可以在“特性列表编辑器”中导航到该字段并按下向下按钮
替换换行符
使用方法将所有换行符替换为@“
更好的修剪
因此,替换制表符(\t
)似乎会使字符串无法被XMLReader
读取。因此,要解决这个问题,更改XMLReader
代码以将修剪后的值插入字典会更容易
在方法解析器:didEndElement:namespaceURI:qualifiedName:
中,替换
[dictInProgress setObject:textInProgress forKey:kXMLReaderTextNodeKey];
与
嘿,deepak在将NSString*testXMLString解析为NSDictional之前,我应该如何从NSString*testXMLString中删除这些新行字符。嗨,deepak,在将字符串解析为NSdictinoary之前,我尝试过过滤该字符串,但文本节点中存在相同的字符。我认为,当我将字符串中的值解析为Nsdictionary时,它们会被添加。是否有一种方法可以过滤整个字典并从中删除\n和\t字符?遍历字典并删除它们将是一个复杂的过程。在字符串本身中替换它是正确的。我可以获取链接以便自己尝试吗?您是否也在为
\t
做同样的事情?使用上面的同一行并将\n
替换为\t
@Amrit更新了答案。似乎有更好的方法来做到这一点。
[dictInProgress setObject:textInProgress forKey:kXMLReaderTextNodeKey];
NSString * trimmedString = [textInProgress stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n\t"]];
[dictInProgress setObject:trimmedString forKey:kXMLReaderTextNodeKey];