Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
25 / 25 / 1
Регистрация: 03.05.2014
Сообщений: 24

TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string

17.05.2014, 10:10. Показов 3960. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем-то, задача проста (для тех, кто работал с библиотекой TinyXML). Но я первый раз с ней работаю, и вообще первый раз со сторонними библиотеками.
Имеется: объект, содержащий данные XML-тега (получено с помощью метода FirstChildElement, сохранено в объект типа TiXmlElement).
Нужно: преобразовать или в string (лучше всего), или в массив char или в TiXmlString (последний вариант, тогда нужно TiXmlString в string перевести).

Заранее спасибо за помощь.

Добавлено через 9 минут

Выложил ниже main() - точку входа. Коротенько опишу класс Sum. Имеет поля "сумма", "буквенный код", "курс доллара". Без полиморфизма и наследования.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int main()
{
    setlocale(0, "");
 
    float any2rur, to_usd_into_rur;
    Sum s1(500, 8.5, "UAH");
 
    TiXmlDocument *xml_MAIN = new TiXmlDocument("XML_daily.asp.xml");
    if(!xml_MAIN->LoadFile())
        return 1;
    TiXmlElement *xml_ValCurs = 0;
    TiXmlElement *xml_Valute = 0;
    TiXmlElement *xml_CharCode = 0;
    TiXmlElement *xml_Name = 0;
    TiXmlElement *xml_Value = 0;
 
    xml_ValCurs = xml_MAIN->FirstChildElement("ValCurs");
    xml_Valute = xml_ValCurs->FirstChildElement("Valute");
    xml_CharCode = xml_Valute->FirstChildElement("CharCode");
    //delete xml_CharCode;
    xml_Name = xml_Valute->FirstChildElement("Name");
    //delete xml_Name;
    xml_Value = xml_Valute->FirstChildElement("Value");
 
    string str1 = (string)xml_CharCode; //вот это организовать
    string str2 = s1.GetCode();
 
    while(xml_Valute != NULL)
    {
         if(str1 != str2) //для этого условия сравнения string
        {
            xml_Valute = xml_Valute->NextSiblingElement("Valute");
        }
        xml_Value->QueryFloatAttribute("Value", &any2rur);
    }
    //cout << &any2rur;
}


Добавлено через 10 часов 35 минут
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2014, 10:10
Ответы с готовыми решениями:

Подскажите, пожалуйста, как преобразовать данные из excel в string или в char*, char perm [] в visual c++
Подскажите, пожалуйста, как преобразовать данные из excel в string или в char*, char perm также для вывода на экран среда visual c++ ...

Преобразовать const unsigned char* в std::string (или _bstr_t )
Здравствуйте старшие товарищи! Есть функция, которая возвращает результат типа const unsigned char*. а мне нужно получить ...

Как преобразовать char* в string и вывести переменную string на экран?
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

25
25 / 25 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 17:48  [ТС]
Студворк — интернет-сервис помощи студентам
0x10, внушил локаль l("RU_ru"), реализовал функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double ToDouble(const char *p)
    {
        locale l("RU_ru");
        stringstream ss(p);
        ss.imbue(l);
        double d = 0;
        ss >> d;
        return d;
    }
/////////
int main()
    { // ........ //
        value = ToDouble(xml_Value->GetText());
    }
что-то не пойму, пишет
Кликните здесь для просмотра всего текста
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

я так понял, что нельзя создавать такие вещи, как std::locale l("ru_RU");
outoftime,

Не по теме:

но все же мы еще раз спросим и сказать мы вас попросим :)

0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.05.2014, 17:52
NewEXE, ru_RU - название локали в моей системе, в винде может отличаться. Видел, что пишут "Russian" - мб получится.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
19.05.2014, 18:19
NewEXE, я бы сделал костыль. Определил сколько в строке символов не цифровых, и, если их количество равно одному, заменил его на http://www.cplusplus.com/refer... mal_point/ после чего пользовался бы любым библиотечным способом без опаски.

Добавлено через 58 секунд
Идею взял отсюда http://habrahabr.ru/post/138957/
1
25 / 25 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 19:47  [ТС]
0x10, у меня работает, если сделать так:
C++
1
locale l("");
но тогда выводится 31. Пробовал через
C++
1
setlocale(LC_NUMERIC, "");
тоже самое (31)
под катом несколько ссылок
Кликните здесь для просмотра всего текста
вот эту информацию я осилил (еще давно, но повторил) и попробовал все, что там было;
предстоит задача обратная и немного полегче (чтобы в консоли выдавалась запятая). Решили с помощью класса. Не разобрался с ним;
не используют stringstream и не создают объектов типа locale.


Добавлено через 15 минут
outoftime, а что, если просто заменить запятую на точку после считывания? Костыль конечно, не такой изящный, как у Вас (), но проще. Типа так: s = s->Replace(',' , '.'); (но так сработает с System::String^ ! Поищу подобную для std::string)
Нашел http://www.cplusplus.com/refer... g/replace/

Добавлено через 17 минут
ДА!!! Я сделал это!
C++
1
2
3
4
string str;
str = xml_Value->GetText();
str.replace(str.find(","), 1, ".");
value = ToDouble(str);
Добавлено через 3 минуты
Теперь осталось выяснить, как получить xml сразу из asp
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
19.05.2014, 21:02
Цитата Сообщение от NewEXE Посмотреть сообщение
Теперь осталось выяснить, как получить xml сразу из asp
Имя файла не обязательно должно иметь расширение .asp, главное чтобы язык разметки был валидным. В крайнем случае можно обрезать до нужной части.
0
25 / 25 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 21:45  [ТС]
outoftime, с данным парсером не прокатило. Мне посоветовал 0x10 использовать URLDownloadToFile или cURL
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2014, 21:45

Преобразовать String в Char
У меня регулярка, которая должна вернуть 1 символ из строки. Как мне результирующий string из 1 символа преобразовать в char?

Преобразовать String в char*
Добрый день! Подскажите пожалуйста, как можно преобразовать тип char? А именно: Есть строка кода char* X=&quot;Текст в виде пути на...

Преобразовать string в char
Здравствуйте, Не могу найти, как преобразовать string в char. У меня имеется строка, состоящая из 26 символов. Хочу сделать массив,...

Преобразовать string в массив char
Всем доброго времени суток!Как преобразовать string в массив char.

Как преобразовать string[] в char[]?
Суть такая, у меня есть строка string str2 = - можно ли мне из неё получить массив символов, например chr chr1 - 255, 244, 233 и т.п. -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru