Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从XML到NSdictionary再到plist_Iphone_Ios_Plist_Nsdictionary_Nsxmlparser - Fatal编程技术网

Iphone 从XML到NSdictionary再到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

嗨,伙计们,我有点奇怪的问题。我正在使用一个简单的XML到NSDictionary转换器 但是如果打印NSDictionary,我可以看到节点的文本值,但是如果我将其存储在plist中,文本节点将没有任何字符串值。请参见附加图像

这是plist的截图

这是密码

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];