Работа с пробелами при разборе XML - PullRequest
3 голосов
/ 06 января 2011

У меня проблема с анализом XML.

Я проанализировал данные городов Амстердам и Ден Бош.

Амстердам работает нормально, а Ден Бош - нет.

Без сомнения, это связано с проблемой космоса. Ден Бош имеет пробел.

Должен ли я сократить пробелы в своем приложении или веб-сервисе?

Что лучше всего подойдет для решения проблемы космоса?

EDIT: OP и @ PeterMurray-Rust, похоже, согласны с тем, что проблема заключается в том, что стороннее приложение возвращает экранированные URL-адреса строки вида:

"Den%20Bosch"

% 20 не распознается XML как что-то особенное, и что будет необходимо заменить вхождения пробелами. Типичный подход сценариев будет

s/%20/ /g

Вероятно, это довольно распространенная проблема, хотя я не понимаю, почему контент должен быть закодирован в URL.

[ОП, пожалуйста, прокомментируйте, если я ошибся]

Ответы [ 4 ]

2 голосов
/ 06 января 2011

Из вашего обновления я предполагаю, что данные выглядят примерно так:

<city>Den%20Bosch</city>

Строка "% 20" - это три символа, которые XML не считает имеющими какое-либо конкретное значение.В зависимости от вашего языка или от того, используете ли вы XSLT, вам придется заменить их.В Java и библиотеке XOM я мог бы написать

String value = cityNode.getValue().replaceAll("%20", " ");

Я не могу помочь со спецификой Cocoa - думаю, вам придется изучить API, чтобы найти способ получения значений содержимого.

1 голос
/ 06 января 2011

Не слишком много знаю о какао и вашем xml. Названия городов, это внутренний текст имени узла или тега. Если оно находится в имени тега или атрибутах без кавычек, произойдет сбой. Если это во внутреннем тексте, это должно работать. Однако есть фрагмент CDATA, который сообщает парсеру игнорировать содержимое

1 голос
/ 06 января 2011

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

0 голосов
/ 06 января 2011
This is the code i implemented its working fine..........


if ([appDelegate.cityListArray count]>0) {
        aDJInfo=[appDelegate.cityListArray objectAtIndex:indexPath.row];
//http://compliantbox.com/party_temperature/citysearch.php?city=Amsterdam&latitude=52.366125&longitude=4.899171
        url=@"http://compliantbox.com/party_temperature/citysearch.php?city=";
        NSString *string=[aDJInfo.city_Name stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
        url=[url stringByAppendingString:string];
        NSLog(@"abbbbbbbbbbb %@",string);
        url=[url stringByAppendingString:@"&latitude=52.366125&longitude=4.899171"];
        [self parseEventName:[[NSURL alloc]initWithString:url]];
    }
}

@ Всем большое спасибо ..

...