Название: Как сравнивать строки из XML файла с ключами Отправлено: Scotty от Октябрь 15, 2009, 16:33 Есть простенькая проблемка, я пробегаюсь по большому количеству xml документов и проверяю некоторые ключи во всех нодах, так вот, мне нужно выбирать только те ноды в которых есть в ключах некоторые сочетания слов.
Заголовок XML фала выглядит так: Код: <?xml version="1.0" encoding="UTF-8" standalone="no"?> Думаю это из-за проблемы в кодировке ... подскажите как мне сравнивать значение ноды полученой из UTF-8 XML фала с некоторым шаблоном. (Пишу в Qt Creator'e, WinXP) Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: Scotty от Октябрь 15, 2009, 16:44 Прочитал и удивился сам себе, вот жешь каряво пишу, короче говоря нужно примерно вот что:
Код: <Node name="message 18"> Код: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: sLiva от Октябрь 15, 2009, 19:05 А покажи как читаешь, в отладчике смотрел содержимое?
Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: Scotty от Октябрь 15, 2009, 20:12 Только не смейтесь на глуппость кода, я только учусь ... Это последний вариант. Просто уже не понимаю что писать ...
Код: QDomNode root = xmlDocument->childNodes().item(1).childNodes().item(0); Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: Scotty от Октябрь 15, 2009, 21:29 При этом я вот одного понять не могу, если я пишу на англисском, то всё хокей, стоит только попробовать кирилицу - сразу нефига не работает.
Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: BRE от Октябрь 15, 2009, 21:35 При этом я вот одного понять не могу, я когда пишу на англисском, то всё хокей, стоит только попробовать кирилицу - сразу нефига не работает. Так и должно быть. :)Почитай про строки в Qt, про QTextCodec, про QObject::tr, про кодировки. На форуме в куче тем поднимались подобные вопросы. Поищи. ;) Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: Scotty от Октябрь 15, 2009, 21:56 :-\ может быть я чего не понимаю, но поискал по форуму и нашел мол перед открытием файла надо установить кодек:
Код: QTextCodec *codec = QTextCodec::codecForName("UTF-8"); Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: BRE от Октябрь 15, 2009, 22:08 :-\ может быть я чего не понимаю, но поискал по форуму и нашел мол перед открытием файла надо установить кодек: В QString строка храниться в UNICODE. Ты набираешь свои исходники в другой кодировке (win - cp1251, linux - utf8 или koi8r).Код: QTextCodec *codec = QTextCodec::codecForName("UTF-8"); Что бы кириллица из исходников корректно преобразовалась в UNICODE, нужно сделать дополнительные телодвижения. Нужно настроить (например в функции main) кодек который будет использоваться для "сишных" строк: Код
или использовать функцию QObject::tr(). Т.е. все строки помещать в нее: Код и установить кодек для tr: Код
Но! Не рекомендуется задавать константные строки в национальные кодировки. Почитай раздел Internationalization в assistant. Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: Scotty от Октябрь 21, 2009, 18:07 Не помогает, в консоль не выводит ничего.
Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: break от Октябрь 22, 2009, 00:42 1) при работе с XML удобно использовать метод QDomElement elementsByTagName - он выберет в список QDomElement-ов все с заданным именем тега рекурсивно в вашем случае имя тега Prp
2) Для решения проблемы сравнения вам надо 100% точно понять в какой кодировке XML и в какой исходник программы - как вам подсказали выше судя по заголовку XML он в UTF8, а если программа ваша в Windows пишется то 90% что кодировка исходников WIN1251 Выведите проходя по циклу в QDebug() << значение ноды из очережной строки << эталонная нода; если у вас кодировки не соответствуют - то в одном из выражений будут каракули - дальше можно эксперементировать с установкой кодека как описали вам выше или еще использовать для эталонного выражения ф-ции в зав-сти от вашей кодировки исходников: QString fromAscii ( const char * str, int size = -1 ) QString fromLatin1 ( const char * str, int size = -1 ) QString fromLocal8Bit ( const char * str, int size = -1 ) QString fromStdString ( const std::string & str ) QString fromStdWString ( const std::wstring & str ) QString fromUcs4 ( const uint * unicode, int size = -1 ) QString fromUtf8 ( const char * str, int size = -1 ) QString fromUtf16 ( const ushort * unicode, int size = -1 ) Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: whirlwind от Октябрь 22, 2009, 10:20 2) Для решения проблемы сравнения вам надо 100% точно понять в какой кодировке XML и в какой исходник программы - как вам подсказали выше судя по заголовку XML он в UTF8, а если программа ваша в Windows пишется то 90% что кодировка исходников WIN1251 Как по-моему, совершенно вредный совет. Ни в коем случае программа не должна зависеть от кодировки своего исходного файла. А если вдруг понадобится потом на linux/mac портировать? или, как оно бутет в trac просматриваться? или вдруг нужно будет строку на другом языке искать, немецком, например.как уже тут советовали, лучше сразу прочитать про Internationalization Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: break от Октябрь 22, 2009, 11:05 Цитировать Ни в коем случае программа не должна зависеть от кодировки своего исходного файла. Она всегда от этого зависит, если работает с выводом строк и требуется задать константу char* - ов. Просто нужно исходники содержать в UTF8 - кодировка которая есть везде в которой есть все языки и никаких проблем, а раз исходники в WIN1251 - то проблемы при переходе на MAC, UNIX и др. Так и так будут - например русские комментарии. Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: whirlwind от Октябрь 22, 2009, 12:30 О, русские комментарии (и вообще комментарии на национальных языках) -- это тоже зло :) Я как-то раз столкнулся с программой котрая была замечательно откомментирована, но на польском :)
Хотя, конечно, зависит от ситуации, иногда лучше не заморачиваться Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: lit-uriy от Октябрь 22, 2009, 13:07 >>и вообще комментарии на национальных языках
Стал быть надо их писать на Эспиранто Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: break от Октябрь 22, 2009, 14:12 Цитировать О, русские комментарии (и вообще комментарии на национальных языках) -- это тоже зло При программировании некоторой запутанной логики, можно вполне использовать национальную кодировку для комментариев. Кроме того некоторые удобные сокращения и специфические термины не переводимы на другие языки - а писать транслитом это маразм. Название: Re: Как сравнивать строки из XML файла с ключами Отправлено: Scotty от Октябрь 24, 2009, 23:04 Мда пытался по разному, но чего то никак ... перечитал кучу статей, наверное надо ещё пару куч прочитать, запутался окончательно я в кодировках, куда и чего выводит, откуда что читает ... всё ... мозги закипели ...
|