XML к обязательному списку - PullRequest
2 голосов
/ 27 июня 2011

Привет, ребята, у меня маленькая странная проблема. Я использую простой конвертер XML в NSDictionary http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/ и но если вы напечатаете NSDictionary, я могу увидеть текстовое значение для узла, но если я сохраню его в plist, текстовый узел не будет иметь никакого строкового значения. см. прикрепленные изображения. i can see the text node value when i print NSdictionary

вот скриншот plist.

enter image description here

вот код

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

1 Ответ

3 голосов
/ 28 июня 2011

Я не думаю, что ваши plist файлы имеют пустые значения.Вы просто не учитываете символ новой строки в выделенном тексте на первом изображении ("\n\thttp://wordpress.org/?v=3.0.1").

Один из простых способов проверить это - открыть его с помощью текстового редактора.Вы найдете, что значения там.Вы также можете перейти к этому полю в редакторе списка свойств и нажать кнопку «вниз».

Замена символов новой строки

Использование stringByReplacingOccurrencesOfString:withString:метод замены всех символов новой строки на @"".

testXMLString = [testXMLString stringByReplacingOccurrencesOfString:@"\n" withString:@""];

Улучшенная обрезка

Таким образом, замена вкладок (\t) делает строку нечитаемой дляXMLReader.Чтобы исправить это, было бы проще изменить код XMLReader, чтобы вставить усеченные значения в словарь.

В методе parser:didEndElement:namespaceURI:qualifiedName: заменить

[dictInProgress setObject:textInProgress forKey:kXMLReaderTextNodeKey];

на

NSString * trimmedString = [textInProgress stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n\t"]];
[dictInProgress setObject:trimmedString forKey:kXMLReaderTextNodeKey];
...