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

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

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

Author24 — интернет-сервис помощи студентам
Вообщем-то, задача проста (для тех, кто работал с библиотекой 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2014, 10:10
Ответы с готовыми решениями:

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

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

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

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

25
25 / 25 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 17:48  [ТС] 21
Author24 — интернет-сервис помощи студентам
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
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.05.2014, 17:52 22
NewEXE, ru_RU - название локали в моей системе, в винде может отличаться. Видел, что пишут "Russian" - мб получится.
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
19.05.2014, 18:19 23
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  [ТС] 24
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║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
19.05.2014, 21:02 25
Цитата Сообщение от NewEXE Посмотреть сообщение
Теперь осталось выяснить, как получить xml сразу из asp
Имя файла не обязательно должно иметь расширение .asp, главное чтобы язык разметки был валидным. В крайнем случае можно обрезать до нужной части.
0
25 / 25 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 21:45  [ТС] 26
outoftime, с данным парсером не прокатило. Мне посоветовал 0x10 использовать URLDownloadToFile или cURL
0
19.05.2014, 21:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2014, 21:45
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru