iPhone, как получить атрибут CDATA с помощью NSXMLParser? - PullRequest
0 голосов
/ 27 мая 2011

Я хочу разобраться с онлайн-XML, где XML выглядит следующим образом:

<menu maincategory="![CDATA[Erhverv]]" subcategory="![CDATA[Erhvervsregister]]" category="![CDATA[Akupunktur]]"/>

В парсере функций didStartElement я использовал как показано ниже:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    if ([elementName isEqualToString:@"menu"]) {
        NSString *maincategory = [attributeDict objectForKey:@"maincategory"];
    }
}

Вывод похож на ниже, используя% @:

attributeDict:{
    category = "![CDATA[Advokater]]";
    maincategory = "![CDATA[Erhverv]]";
    subcategory = "![CDATA[Erhvervsregister]]";
}


2011-05-27 19:20:42.663 XML[62494:840b] maincategory using %s: `ãâå
2011-05-27 19:20:42.663 XML[62494:840b] maincategory using %@: ![CDATA[Erhverv]]

Но мне нужен вывод без тега! [CDATA]

Может кто-нибудь помочь мне, как я могу решить это? Заранее спасибо

1 Ответ

0 голосов
/ 27 мая 2011

Я бы опубликовал обработку attributeDict с NSRegularExpression объектом. Для каждой строки в словаре скопируйте ее в NSMutableString (с именем theString в моем коде ниже) и запустите этот код:

NSError *theError = nil;
NSRegularExpression *theExpression = [NSRegularExpression regularExpressionWithPattern:@"!\\[CDATA\\[(.*)\\]\\]" options:(NSRegularExpressionOptions)nil error:&theError];
NSUInteger count = [theExpression replaceMatchesInString:theString options:(NSRegularExpressionOptions)nil range:NSMakeRange(0, [theString length]) withTemplate:@"$1"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...