Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 21:51   #1
II_Dimit_II
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 32
Радость Создание и запись XML файлов

помогите создать XML файл в bilder, а так же запись данных и чтение из него
II_Dimit_II вне форума Ответить с цитированием
Старый 31.05.2012, 08:53   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Используем TXMLDocument.
Код:
  TXMLDocument* Config = new TXMLDocument(Application);
	Config->FileName = FileName;
	Config->DOMVendor = GetDOMVendor("MSXML");
	Config->Active = true;
	Config->Encoding = "UTF-8";
        //Это открыли файл.
        Config->DocumentElement // корневой узел
        Config->DocumentElement->ChildNodes // дочки корневого
        Config->DocumentElement->ChildNodes->GetCount() // количество
_di_IXMLNode ParentNode = Config->DocumentElement->ChildNodes->FindNode(NameNode); // поиск узла
ParentNode->ChildNodes->Get(IndexNode)->Text; //значение

_di_IXMLNode Node  = ParentNode->AddChild(NameNode); // добавить
Node->Text = ValueNode; // значение
Node->SetAttribute("Имя", value); // установить аттрибут
Node->GetAttrubute("Имя"); //получить аттрибут


Config->SaveToFile(FileName); // сохранить
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 06.06.2012, 14:54   #3
II_Dimit_II
Пользователь
 
Регистрация: 29.05.2012
Сообщений: 32
По умолчанию

Мммм.....проблемка в том, что у меня данные берутся из StringGrid и загружаются туда же!!! не знаю как сделать(((

Вот код сохранения, но после его использования при выходе из программы вылетает ошибка!!!!!!!!!!!!!
//////////////////////////////////////////////////////////////////////////////////////////////////
Код:
void __fastcall TForm1::N8Click(TObject *Sender)
{ 
_di_IXMLDocument XMLDocument = NewXMLDocument();
  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 firma=StringGrid1->Cells[0][i+1];
	nodNew->SetAttribute("firma", firma);
	String model=StringGrid1->Cells[1][i+1];
	nodNew->SetAttribute("model", model);
	String plata=StringGrid1->Cells[2][i+1];
	nodNew->SetAttribute("plata", plata);
	String OZY=StringGrid1->Cells[3][i+1];
	nodNew->SetAttribute("OZY", OZY);
	String videokarta=StringGrid1->Cells[4][i+1];
	nodNew->SetAttribute("videokarta",videokarta);
	String disk=StringGrid1->Cells[5][i+1];
	nodNew->SetAttribute("disk",disk);
	String pitanie=StringGrid1->Cells[6][i+1];
	nodNew->SetAttribute("pitanie",pitanie);
	String cena=StringGrid1->Cells[7][i+1];
	nodNew->SetAttribute("cena",cena);
	}
	XMLDocument->SaveToFile("katalog.txt");
}
__finally {FreeAndNil(&XMLDocument); delete XMLDocument; }
}

Последний раз редактировалось Stilet; 06.06.2012 в 18:30.
II_Dimit_II вне форума Ответить с цитированием
Старый 28.11.2012, 22:29   #4
Aibolit
Новичок
Джуниор
 
Регистрация: 28.11.2012
Сообщений: 3
По умолчанию

Всем доброй ночи. Ребята извините, что поднимаю данную тему, но у меня вопросик:
Как получить значение атрибутов у родительского узла? Дочерних я могу получить.
например имеется xml;
Код:
<?xml version="1.0" encoding="UTF-8"?>
<Settings WinDir="C:\WINDOWS\" OS_MjVer="5" OS_MiVer="1" OS_Build="2600" BootMode="0" OS_CSDV="Service Pack 3">
	<Connection>
		<ConnectionString Value="Provider=SQLOLEDB.1;Data Source=s42;Initial Catalog=az;Integrated Security=;"/>
		<User Value="it-ir"/>
	</Connection>
	<WindowParams Left="242" Top="164"/>
	<Port PortNum="COM1" Speed="9600" Parity="NOPARITY" StopBit="1" ByteSize="8" SleepTime="1000"/>
	<DataParams GskNum="2"/>
</Settings>
Мне нужно получить значения родительского узла (Settings) значение атрибута WinDir, то есть
Код:
C:\WINDOWS\
Заранее благодарен.

Последний раз редактировалось Aibolit; 28.11.2012 в 22:39.
Aibolit вне форума Ответить с цитированием
Старый 28.11.2012, 23:53   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Используем TXMLDocument.
А инклюд какой? Если не секрет.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.11.2012, 00:06   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Aibolit

Как получить значение атрибутов у родительского узла?

примерно так:
Код:
#include <Windows.h>
#include <Objbase.h>

#import <MsXml3.dll>
#include <iostream>

CoInitialize(NULL);
try
{
	MSXML2::IXMLDOMDocumentPtr xml(__uuidof(MSXML2::DOMDocument));
	xml->load(L"zzz.xml");
	_bstr_t windir = xml->selectSingleNode(L"/Settings/@WinDir")->nodeValue;
	std::wcout << (const wchar_t*) windir;
}
catch (const _com_error& e)
{
}
Rififi вне форума Ответить с цитированием
Старый 29.11.2012, 09:43   #7
Aibolit
Новичок
Джуниор
 
Регистрация: 28.11.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
А инклюд какой? Если не секрет.
Да использую
Код:
TXMLDocument *XMLDocument1;
это в .h
.cpp
Код:
_di_IXMLDocument xmlDoc;
   IXMLNode *xmlRoot;
   _di_IXMLNode NodeList;
все инклюды
Код:
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <msxmldom.hpp>
#include <XMLDoc.hpp>
#include <xmldom.hpp>
#include <XMLIntf.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
Компилятор RadStudio XE.

Rififi а вы написали код случаем не для визуал студио???

Последний раз редактировалось Aibolit; 29.11.2012 в 09:53.
Aibolit вне форума Ответить с цитированием
Старый 29.11.2012, 10:25   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Увы, но в Buildere таких файлов нет. Печально.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.11.2012, 21:12   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Aibolit

попробуй сначала скомпилировать как есть
если это поделие не умеет задницу лизать быть совместимым с micorosft, тогда это вообще клиника.
Rififi вне форума Ответить с цитированием
Старый 30.11.2012, 00:50   #10
Aibolit
Новичок
Джуниор
 
Регистрация: 28.11.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Aibolit

попробуй сначала скомпилировать как есть
если это поделие не умеет задницу лизать быть совместимым с micorosft, тогда это вообще клиника.
По про бывал. Ошибки
Код:
[BCC32 Error] E2209 Unable to open include file ' MsXml3.tlh'
[BCC32 Error] E2090 Qualifier 'MSXML2' is not a class or namespace name
  Full parser context
    Unit1.cpp(64): parsing: void _fastcall TForm1::Button2Click(TObject *)
[BCC32 Error] Unit1.cpp(70): E2451 Undefined symbol '_bstr_t'
  Full parser context
Но я нашел решение завтра постараюсь выложить его.

Но у меня возник другой вопрос как отловить ошибку при загрузки файла .xml когда он битый с возможностью ее исправления.
в основном ошибка одна и та же, нет пробела между двумя атрибутами.

Общую ошибку я отлавливаю блоком
Код:
try{}
catch(...) //вот здесь надо поставить имя или указатель отлавливаемой ошибки, но я его не знаю.
Но видно при загрузки страницы браузером, он ее как то уловливает, даже показывает где ошибка строка номер символа.
Aibolit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт файлов XML в книгу XLS Alex1973 Microsoft Office Excel 1 07.03.2012 23:55
Запись списка с множественным выбором в xml Чай_ник Помощь студентам 0 01.03.2012 23:40
создание XML C# rmavlasv C# (си шарп) 1 25.12.2011 19:05
Редактор XML файлов в Delphi MagGarbut Помощь студентам 1 15.03.2011 16:26
Чтение и запись параметров в xml BioHEX Общие вопросы Delphi 2 15.01.2010 04:16