Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

У моего нового TXMLDocument DocumentElement==NULL

6.3K
08 апреля 2004 года
OlegOlegOleg
7 / / 08.04.2004
На форму бросил TXMLDocument
Хочу его заполнить руками и сохранить в файл
Только стал заполнять, а у него
XmlMainDoc->DocumentElement==NULL :(
Я ему тогда
XmlMainDoc->AddChild("XXX");
Ну и в документе у меня этот XXX стал верхним узлом.
А мне надо по-нормальному чтобы было: верхний узел
<?xml version="1.0" encoding="Windows-1251"?>
Вопрос: как инициировать DocumentElement?
Спасибо
-Олег
293
09 апреля 2004 года
SEDEGOFF
586 / / 06.10.2002
Я решил эту проблему так (я не претендую на правильнось и оригинальность)

_di_IXMLNode sel = (_di_IXMLNode &)Tree->Selected->Data;
_di_IXMLNodeList selchild = sel->GetChildNodes();
for(int i = 0; i<selchild->Count; i++)
{
try
{

String file_name = selchild->Nodes->GetAttribute("ФАЙЛ");
DeleteFileA(DIR + "\\" + file_name);
int filehandle = FileCreate(DIR + "\\" + file_name);
String temp = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n";
FileWrite(filehandle, temp.c_str(), temp.Length());
temp = "<ГЛАВНЫЙ></ГЛАВНЫЙ>";
FileWrite(filehandle, temp.c_str(), temp.Length());
FileClose(filehandle);
//TXMLDocument *UP = new TXMLDocument(DIR + "\\" + file_name);
UP->LoadFromFile(DIR + "\\" + file_name);
UP->Active = true;
try
{
_di_IXMLNode MAIN_NODE = UP->ChildNodes->Nodes[1];
//прописываем аттрибуты
_di_IXMLNodeList attr = selchild->Nodes->GetAttributeNodes();
for(int j = 0; j < attr->Count; j++)
MAIN_NODE->SetAttribute(attr->Nodes[j]->NodeName, attr->Nodes[j]->Text);
//начинаем загонять данные
_di_IXMLNodeList nodes = selchild->Nodes->GetChildNodes();
for(int j = 0; j < nodes->Count; j++)
MAIN_NODE->ChildNodes->Add(nodes->Nodes[j]);

UP->SaveToFile(DIR + "\\" + file_name);
}
__finally
{
UP->Active = false;

}

}
catch(Exception &e)
{
Application->MessageBoxA(
("Ошибка выгрузки данных"+selchild->Nodes->NodeName+
"\n" + e.Message).c_str()
,"Ошибка",MB_OK|MB_ICONHAND);
}
}
6.3K
09 апреля 2004 года
OlegOlegOleg
7 / / 08.04.2004
Тысяча благодарностей!
Я взял твою идею создавать вручную верхнюю строку и верхний узел и
у меня тоже заработало!
Скажи, это ты сам придумал или где видел? Дело в том, что этот прием, по-моему, мог родиться только от безысходности. Я ожидал, что должны существовать более цивилизованные способы инициации нового документа.
Впрочем, такой выход меня тоже вполне устраивает.
Спасибо
-Олег

PS помОссируйте -> помАссируйте
293
09 апреля 2004 года
SEDEGOFF
586 / / 06.10.2002
Идея это моя. Родиалась она из за ограниченности времени.
1
12 апреля 2004 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by OlegOlegOleg
Тысяча благодарностей!
Я взял твою идею создавать вручную верхнюю строку и верхний узел и
у меня тоже заработало!
Скажи, это ты сам придумал или где видел? Дело в том, что этот прием, по-моему, мог родиться только от безысходности. Я ожидал, что должны существовать более цивилизованные способы инициации нового документа.
Впрочем, такой выход меня тоже вполне устраивает.
Спасибо
-Олег

PS помОссируйте -> помАссируйте


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

 
Код:
AnsiString StringXML = "<?xml version=\"1.0\"?><Rigel></Rigel>";
 TStringStream *Stream = new TStringStream(StringXML);
  xml->LoadFromStream(Stream);
  xml->SaveToFile(WideString("catalog.xml"));
6.3K
12 апреля 2004 года
OlegOlegOleg
7 / / 08.04.2004
Цитата:
Originally posted by kot_

AnsiString StringXML = "<?xml version=\"1.0\"?><Rigel></Rigel>";
TStringStream *Stream = new TStringStream(StringXML);
xml->LoadFromStream(Stream);
xml->SaveToFile(WideString("catalog.xml"));
[/code]



Со стримом чуть по-красивее, чем предварительная запись в файл. НО принципиальной разницы нет: по прежнему <?xml version=\"1.0\"?> и DocumentElement создаются вручную. Правильно говоришь, можно так продолжать и дальше, пока весь код не забьешь.
По-хорошему если уж <?xml...?> парсится _оттуда_, то должно быть средство культурно его загнать _туда_ для нового xml документа. То же касается DocumentElement. Когда я пишу пмсьмо, я руками вначале не прописываю Return-Path, Delivered-To т.д.
Я подправил у себя с твоим стримом. Спасибо. Работает.
-Олег

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог