Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
NewEXE
3 / 3 / 1
Регистрация: 03.05.2014
Сообщений: 24
17.05.2014, 10:10     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string #1
Вообщем-то, задача проста (для тех, кто работал с библиотекой 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 минут
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NewEXE
3 / 3 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 17:48  [ТС]     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string #21
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,

Не по теме:

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
19.05.2014, 17:52     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string #22
NewEXE, ru_RU - название локали в моей системе, в винде может отличаться. Видел, что пишут "Russian" - мб получится.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.05.2014, 18:19     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string #23
NewEXE, я бы сделал костыль. Определил сколько в строке символов не цифровых, и, если их количество равно одному, заменил его на http://www.cplusplus.com/reference/l...decimal_point/ после чего пользовался бы любым библиотечным способом без опаски.

Добавлено через 58 секунд
Идею взял отсюда http://habrahabr.ru/post/138957/
NewEXE
3 / 3 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 19:47  [ТС]     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string #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/reference/s...tring/replace/

Добавлено через 17 минут
ДА!!! Я сделал это!
C++
1
2
3
4
string str;
str = xml_Value->GetText();
str.replace(str.find(","), 1, ".");
value = ToDouble(str);
Добавлено через 3 минуты
Теперь осталось выяснить, как получить xml сразу из asp
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.05.2014, 21:02     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string #25
Цитата Сообщение от NewEXE Посмотреть сообщение
Теперь осталось выяснить, как получить xml сразу из asp
Имя файла не обязательно должно иметь расширение .asp, главное чтобы язык разметки был валидным. В крайнем случае можно обрезать до нужной части.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2014, 21:45     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string
Еще ссылки по теме:

C++ string[] в char[][] или char[]
Преобразовать string в массив char C++
C++ Как преобразовать string в char*?

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

Или воспользуйтесь поиском по форуму:
NewEXE
3 / 3 / 1
Регистрация: 03.05.2014
Сообщений: 24
19.05.2014, 21:45  [ТС]     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string #26
outoftime, с данным парсером не прокатило. Мне посоветовал 0x10 использовать URLDownloadToFile или cURL
Yandex
Объявления
19.05.2014, 21:45     TinyXML. Преобразовать TiXmlElement в TiXmlString, char[] или string
Ответ Создать тему
Опции темы

Текущее время: 23:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru