Разбор URL из XML с & в нем - PullRequest
       14

Разбор URL из XML с & в нем

0 голосов
/ 08 февраля 2009

Я пытаюсь разобрать URL с & в URL:

ViewArticle.dbml?DB_OEM_ID=1800&ATCLID=3664162

.. но используя NSXMLParser, я получаю только 1800ATCL. Он полностью игнорирует &.

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if (qName) {
        elementName = qName;
    }


    if ([elementName isEqualToString:@"title"]) {
        self.contentOfCurrentNewsProperty = [NSMutableString string];
    }else if ([elementName isEqualToString:@"link"]){
        self.contentOfCurrentNewsProperty = [NSMutableString string];
    }else {
        self.contentOfCurrentNewsProperty = nil;
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{     
    if (qName) {
        elementName = qName;
    }

    _currentElement = elementName;

    if ([elementName isEqualToString:@"title"]) {
        self.currentNewsObject.title = self.contentOfCurrentNewsProperty;
    } else if ([elementName isEqualToString:@"link"]){
        self.currentNewsObject.link = self.contentOfCurrentNewsProperty;
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if (self.contentOfCurrentNewsProperty) {
        [self.contentOfCurrentNewsProperty appendString:string];
    }
}

Есть идеи? Спасибо

Редактировать: Я провел еще несколько тестов и строка <?xml version="1.0" encoding="windows-1252"?> в чем дело, но это встроено в XML-файл, как-нибудь обойти это? **

Ответы [ 3 ]

2 голосов
/ 08 февраля 2009

спасибо вам за помощь, я смог запустить его, используя

    NSData *myData = [NSData dataWithContentsOfURL:URL];
    NSString *myStr = [[NSString alloc] initWithData:myData encoding:NSWindowsCP1252StringEncoding];
    myStr = [myStr stringByReplacingOccurrencesOfString:@"encoding=\"windows-1252\"" withString:@""];
NSLog(@"my str is %@", myStr);

NSData* aData = [myStr dataUsingEncoding:NSUTF8StringEncoding];

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:aData];

теперь все работает, еще раз спасибо.

1 голос
/ 08 февраля 2009

(dbr: оригинальный постер использует NSXMLParser, а не NSXMLDocument, поэтому для него нет способа setCharacterEncoding для переопределения.)

Оператору: чтобы проверить вашу ситуацию, я написал простую утилиту командной строки, которая использует NSXMLParser для анализа XML-документа с помощью инструкции обработки <?xml version="1.0" encoding="windows-1252"?>. Синтаксический анализ всегда завершается неудачно, и код ошибки равен 31, что соответствует перечислению NSXMLParserUnknownEncodingError.

Чтобы решить эту проблему, возможно, вам придется предварительно обработать ваши входные данные. Одним из способов сделать это может быть использование [NSString stringWithCString:yourCstring encoding:NSWindowsCP1252StringEncoding], где yourCstring - это стандартный C char*, содержащий ваш XML. Затем вы можете удалить инструкцию обработки <?xml version="1.0" encoding="windows-1252"?>, преобразовать строку NSString в NSData и передать ее в NSXMLParser.

0 голосов
/ 08 февраля 2009

Возможно, вы могли бы переопределить кодировку, используя setCharacterEncoding

setCharacterEncoding:

Устанавливает кодировку символов получателя в кодировку,

- (void)setCharacterEncoding:(NSString *)encoding

Параметры:

  • кодирование

    Строка, определяющая кодировку; он должен совпадать с именем набора символов IANA. См. http://www.iana.org/assignments/character-sets для получения списка допустимых спецификаторов кодировки.

    Обычно кодировка указывается в декларации XML документа, который обрабатывается, но его можно установить в любое время. Если указанная кодировка не соответствует фактической кодировке, синтаксический анализ документа может завершиться неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...