2012-04-15 3 views
0

Я ищу способ декодирования XML сущности некоторых специальных символов, таких как (µ, & Lambda ;, μ, ν, π) для моего IPad приложение. Я ходил по блогам и часам, чтобы найти решение.Decode XML Entitites с использованием Objective C

Так что я нашел this, и я изменил его путем добавления следующих строк кода,

else if ([scanner scanString:@"µ" intoString:NULL]) 
     [result appendString:@"µ"]; 
    else if ([scanner scanString:@"&Lambda" intoString:NULL]) 
     [result appendString:@"Λ"]; 
    else if ([scanner scanString:@"Π" intoString:NULL]) 
     [result appendString:@"Π"]; 

Но я не чувствую это как хорошее решение.

Итак, я ищу чью-то помощь.

XCode4 и iOS 4.3 являются моей средой разработки.

+0

Вы должны объяснить, почему вы чувствуете, что это нехорошее решение, чтобы люди могли понять, что вы ищете, когда предлагают что-то еще. – sosborn

+0

Причина в том, что я должен поставить условие else для символа. http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references см. Есть много специальных символов. Таким образом, требуется лучшее решение для декодирования объектов xml без проверки их по одному. – chinthakad

ответ

1

Предполагая, что вы уже решили, что вы будете выполнять этот разбор вручную, в отличие от использования NSXMLParser и соответствующих вызовов сущностей в делетете, тогда вы, вероятно, захотите использовать парсер, ориентированный на таблицы, для этого ,

Поскольку & в XML всегда введение в сущности, это безопасно сделать что-то вроде этого (предполагая, что вы разбираете XML, а не HTML, который может иметь значительно расслабленном определение того, что разрешено):

if ([scanner scanString: @"&" intoString: nil]) { 
    NSString *entityNameString; 
    if ([scanner scanUpToString: @";" intoString: entityNameString]) { 
     NSString *entityValue =[entityDictionary objectForKey: entityNameString]; 
     if (entityValue) 
      [result appendString: entityValue]; 
     else { 
      // TODO: figure out if you want to blow an error, ignore the entity, or insert the original string 
      [result appendString: [NSString stringWithFormat: @"&%@;", entityNameString]]; 
     } 
    } else { 
     // TODO: Determine if you want to blow an error, ignore, or insert the original string 
     [result appendString: @"&"]; 
    } 
} 

entityDictionary бы словарь ключевых пар значений, представляющих каждый объект и строку, которую она представляет:

NSDictionary *entityDictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"µ",@"micro", @"π", @"Pi",nil]; 

Или вы можете загрузить из списка свойств с помощью:

NSDictionary *entityDictionary = [NSDictionary dictionaryWithContentsOfURL: @"myEntityList.plist"]; 
Смежные вопросы