2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 134

Работа с TXMLDocument

13.01.2013, 05:14. Показов 21549. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пробую сохранить значения едита в файл

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TXMLDocument *XMLDocument = new TXMLDocument(this);
try
  {
    XMLDocument->Active = true;
    XMLDocument->Encoding = "UTF-8";
    XMLDocument->Options = XMLDocument->Options << doNodeAutoIndent;
 
    _di_IXMLNode nodElement = XMLDocument->CreateElement(L"config", L"edit");
    XMLDocument->ChildNodes->Add(nodElement);
 
    for (int i = 0; i < 1; i++)
    {
 
    IXMLNode *nodNew = XMLDocument->ChildNodes->Last()->AddChild(L"monday");
    String edit1 = Edit2->Text;
    nodNew->SetAttribute("edit", edit1);
    }
XMLDocument->SaveToFile("con.xml");
    MessageBox(0,"Ñîõðàíåíèå ïðîøëî óñïåøíî!","Ñîõðàíåíèå...",MB_OK);
 }
 __finally {delete XMLDocument;}
Почему такая ошибка? заранее спасибо!

C++
1
[C++ Error] Unit1.cpp(89): E2285 Could not find a match for 'TXMLDocument::TXMLDocument(TForm1 * const)'
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2013, 05:14
Ответы с готовыми решениями:

Использование XPath с TXMLDocument
Есть у кого то пример как использовать XPath с помощью TXMLDocument?

Переименование узла TXMLDocument
Возможно ли переименование узла IXMLNode в данном компоненте ? Свойство NodeName только для чтения. Пробовал также модуль...

TXMLDocument статика или динамика?
Доброе всем время суток... Решал задачку по переводу данных из XML файла в текстовый определенного формата. Сделал при помощи...

14
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
13.01.2013, 06:33
new TXMLDocument();
0
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 134
13.01.2013, 15:10  [ТС]
та самая ошибка! когда туда адрес сохранения написать то ошибка нету.
Но у меня ж сохраняется попозже... может еще варианты есть? подскажите пожалуйста
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.01.2013, 16:41
https://www.cyberforum.ru/post3167924.html - Там исходник мой

Но там также
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//-------------------------Сохранение--------------------------------------
void __fastcall TForm2::bSaveClick(TObject *Sender)
{
TXMLDocument *XMLDocument = new TXMLDocument(this);
try
  {
    XMLDocument->Active = true;
    XMLDocument->Encoding = "UTF-16";
    XMLDocument->Options = XMLDocument->Options << doNodeAutoIndent;
 
    _di_IXMLNode nodElement = XMLDocument->CreateElement(L"data", L"");
    XMLDocument->ChildNodes->Add(nodElement);
    for (int i = 0; i < StringGrid1->RowCount; i++)
    {
    IXMLNode *nodNew = XMLDocument->ChildNodes->Last()->AddChild(L"user");
 
    String name=StringGrid1->Cells[0][i+1];
    nodNew->SetAttribute("name", name);
    String vid=StringGrid1->Cells[1][i+1];
    nodNew->SetAttribute("vid", vid);
    String ves=StringGrid1->Cells[2][i+1];
    nodNew->SetAttribute("ves", ves);
    String sreda=StringGrid1->Cells[3][i+1];
    nodNew->SetAttribute("sreda", sreda);
    String sem=StringGrid1->Cells[4][i+1];
    nodNew->SetAttribute("sem",sem);
    }
    XMLDocument->SaveToFile("База рыб.txt");
    MessageBox(0,"Сохранение завершено!!!","Успешно.",MB_OK);
 }
 __finally {delete XMLDocument;}
 
}
//---------------------ЗАГРУЗКА-------------------------------------------
void __fastcall TForm2::bLoadClick(TObject *Sender)
{
TXMLDocument *XMLDocument =new TXMLDocument(this);
try
 {
    XMLDocument->Active = true;
    XMLDocument->Encoding = "UTF-16";
    XMLDocument->Options = XMLDocument->Options << doNodeAutoIndent;
    XMLDocument->LoadFromFile("База рыб.txt");
    IXMLNode *nodRoot = XMLDocument->DocumentElement;
 
    IXMLNode *nodElement;
    int n=nodRoot->ChildNodes->Count;
    StringGrid1->RowCount=1;
 
        for (int i = 0; i < n; i++)
        {
            nodElement = nodRoot->ChildNodes->Nodes[i];
            String name = nodElement->GetAttribute("name");
            StringGrid1->Cells[0][i+1]=name;
            String vid = nodElement->GetAttribute("vid");
            StringGrid1->Cells[1][i+1]=vid;
            String ves = nodElement->GetAttribute("ves");
            StringGrid1->Cells[2][i+1]=ves;
            String sreda = nodElement->GetAttribute("sreda");
            StringGrid1->Cells[3][i+1]=sreda;
            String sem = nodElement->GetAttribute("sem");
            StringGrid1->Cells[4][i+1]=sem;
            StringGrid1->RowCount++;
        }
 
    StringGrid1->FixedRows=1;
    StringGrid1->RowCount--;
    MessageBox(0,"Загрузка завершена!!!","Успешно.",MB_OK);
 }
 __finally{ delete XMLDocument; }
}
//---------------------------------------------------------------------------
Соответственно вопрос - какая у вас версия Builder ?
3
2 / 2 / 0
Регистрация: 09.01.2013
Сообщений: 134
13.01.2013, 18:44  [ТС]
шестой!

Ваш исходник та самая ошибка! Вы хотите сказать что в єтой версии такое не предусмотрено?
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.01.2013, 18:47
Ну так мой исходник на RAD2009 и работает, так что либо смотрите нюансы 6-го ( Help ) либо ставьте новую версию IDE.
0
1 / 1 / 0
Регистрация: 28.12.2013
Сообщений: 86
04.11.2014, 21:59
А как быть, если нужно создать TXMLDocument в своем .cpp? Пытаюсь так:
C++
1
2
3
4
5
    TXMLDocument* xmlSettings = new TXMLDocument(setpath);
    xmlSettings->FileName = setpath;
    xmlSettings->DOMVendor = GetDOMVendor("MSXML");
    xmlSettings->Active = true;
    xmlSettings->Encoding = "UTF-8";
Ругается на последней строке: No active document. Сам файл XML в кодировке UTF-8. Особенность в том, что если сохраняю XML файл в Win-1251, но оставляю
XML
1
<?xml version="1.0" encoding="UTF-8"?>
он читает файл до первого кириллического символа.
Если загружаю файл в основном модуле, указывая:
C++
1
new TXMLDocument(Application);
а не путь к файлу в параметре, все работает отлично. Как решить проблему?

Добавлено через 34 минуты
Цитата Сообщение от stokkato Посмотреть сообщение
Особенность в том, что если сохраняю XML файл в Win-1251
Неа, тоже не читает

Добавлено через 17 минут
Проблему не решил, но обошел
C++
1
2
3
4
5
6
TStringList* xmlList = new TStringList();
    xmlList->LoadFromFile(setpath);
    _di_IXMLDocument xmlDoc;
    xmlDoc = LoadXMLData( xmlList->Text );
    xmlDoc->DocumentElement;
    eSettings = xmlDoc->DocumentElement;
Еще удалил из файла строчку
XML
1
<?xml version="1.0" encoding="UTF-8"?>
А почему не грузится напрямую так и не понял. Может свойства какие дополнительные нужно указать, может еще чего... Если кто подскажет, буду благодарен
0
Волшебник
 Аватар для Rapsod
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
06.08.2015, 09:47
А если структура XML чуть отличается. Например ваш код отлично работает с такой структурой XML:
XML
1
2
3
4
<data>
  <user name="myName" vid="myVid" ves="myVes" sreda="MySreda" sem="mySem"/>
  ...
</data>
А вот у меня чуть отличается структура XML и имеет вид:

XML
1
2
3
4
5
6
7
8
9
10
<data>
  <user>
    <name>myName</name> 
    <vid>myVid</vid> 
    <ves>myVes</ves> 
    <sreda>MySreda</sreda> 
    <sem>mySem</sem>
  </user>
  ...
</data>
Что в моем случае вы бы посоветовали?
Заранее благодарю!
0
Волшебник
 Аватар для Rapsod
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
08.08.2015, 10:55
Вопрос решен. Делаю свой компонент. Позже обязательно поделюсь со всеми, может кому-то тоже пригодиться.
Всем спасибо!
0
ps
1 / 1 / 0
Регистрация: 16.05.2014
Сообщений: 31
07.09.2015, 21:26
TXMLDocument - разве не в DELPHI используется? Почему эта тема в C++? Ищу парсер XML для C++, может кто подскажет?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33150 / 21442 / 8223
Регистрация: 22.10.2011
Сообщений: 36,776
Записей в блоге: 9
07.09.2015, 22:10
Цитата Сообщение от ps Посмотреть сообщение
Почему эта тема в C++?
Эта тема не просто в С++, а в С++ Builder, все дельфийские классы прекрасно используются. У тебя какой компилятор?
0
ps
1 / 1 / 0
Регистрация: 16.05.2014
Сообщений: 31
07.09.2015, 22:35
Спасибо за ответ! Пишу в Visual Studio 2012
пытаюсь использовать msxml, но что то не выходит! Хочу обойти все дерево XML
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.09.2015, 22:39
Посмотри в сторону libxml2
1
ps
1 / 1 / 0
Регистрация: 16.05.2014
Сообщений: 31
08.09.2015, 19:55
Спасибо!
Сторонние библиотеки не хочу использовать (можно бы было TinyXML), хочется разобраться с COM -объектами msxml, но пока что тяжко! Из примеров могу только вытащит конкретную Node`y, а так как у меня размер XML и количество в нем Node каждый раз разное, то нужно все пробегать!

Добавлено через 20 часов 34 минуты
Получилось реализовать, что хотел! Кому интересно выкладываю свой код и что содержит XML:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0"?>
<xmldata>
    <comand type="run">
        <path>C:\Windows\System32\calc.exe</path>
    </comand>
    <comand type="cmd">
        <cmdcomand>dir C:\</cmdcomand>
    </comand>
    <comand type="run">
        <path>C:\ProgrammFiles\.exe</path>
    </comand>
    <comand type="cmd">
        <cmdcomand>ipconfig</cmdcomand>
    </comand>
</xmldata>
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
#include "stdafx.h"
#include <atlbase.h>
#include <msxml6.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);
 
    CComPtr<IXMLDOMDocument> spXMLDOM;
    HRESULT hr = spXMLDOM.CoCreateInstance(__uuidof(DOMDocument));
    if ( FAILED(hr) ) throw "Unable to create XML parser object";
    if ( spXMLDOM.p == NULL ) throw "Unable to create XML parser object";
 
    CComBSTR bstrSS(L"comand");
    IXMLDOMNodeList *NodeList = NULL;
    CComVariant varValue(VT_EMPTY);
    IXMLDOMNode *spXMLNode = NULL;
    long value = 0;
 
    VARIANT_BOOL bSuccess = false;
    hr = spXMLDOM->load(CComVariant(L"comand.xml"),&bSuccess);
    spXMLDOM->getElementsByTagName(bstrSS,&NodeList);
    NodeList->get_length(&value);
 
    for(int i = 0; i < value; ++i)
    {
        NodeList->get_item(i,&spXMLNode);
        spXMLNode->get_nodeTypedValue(&varValue);
        spXMLNode->Release();
        spXMLNode = NULL;
    }
 
    CoUninitialize();
 
    return 0;
}
Таким образом получилось заглянуть во все вершины дерева с тегом "comand" и взять их содержимое! Причем количество таких тегов определяется динамически(value)!
0
8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
01.12.2015, 08:57
C++
1
2
3
4
5
6
7
8
void __fastcall TfrmMain::btnDocumentClick(TObject *Sender)
{
    TXMLDocument *docVideos = new TXMLDocument(frmMain);
    docVideos->LoadFromFile(L"C:\\Programs\\videos.xml");
 
    IXMLNode *nodVideo = docVideos->DocumentElement;
    ShowMessage(nodVideo->NodeName);
}
выполняю код и выдает ошибку
could not find a match for 'TXMLDocument::TXMLDocument(TfrmMain *))'

в чем может быть причина, может в заголовочном файле нужно что то написать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2015, 08:57
Помогаю со студенческими работами здесь

TXmlDocument - поиск нода по атрибутам
Есть метод FindNode по поиску нода по названию. Есть ли возможность осуществить поиск нода по значению атрибутов?

TXMLDocument и namespace
Здравствуйте! Понадобилось сформировать вот такой хмл: &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;kml...

TXMLDocument - нету в компонентах
Добрый день, использую Delphi ХЕ2. Хочу использовать компонент TXMLDocument, который должен находится в категории Internet, но...

TXMLDocument позиция узла в тексте
Можно как-нибудь получить позицию заголовка определённого узла в TXMLDocument в тексте (TXMLDocument.XML.Text) ? Сам номер первого символа...

Создание и уничтожение обекта TXMLDocument
Здравствуйте. В конструкторе создаю объект TXMLDocument, при помощи клиентских ф-ий работаю с ним, а в деструкторе пытаюсь его...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru