Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.01.2008, 18:12
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Помогите пожалуйста разобраться с XML

Имеется файл, нужно прочитать только, например:
1)всё из 'page id="1"'
2)из 'page id="2"' со значением 't id="1"'...
3) Как вообще записать что-то типа <t id="ID">test1</t>
Помогите плизз Использую
Код:
uses
MSXML_TLB
Вложения
Тип файла: zip Вот Файл.zip (275 байт, 16 просмотров)

Последний раз редактировалось Oleg, 02.01.2008 в 19:36.
Ответить с цитированием
  #2  
Старый 02.01.2008, 19:05
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
По умолчанию

Может использовать компонент XML Document(сейчас пытаюсь разобраться , помогите )
Как вообще записать вот в такой структуре <t id="ID">test1</t>.
Плизз, помогите

Последний раз редактировалось Oleg, 02.01.2008 в 19:37.
Ответить с цитированием
  #3  
Старый 02.01.2008, 20:24
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Печаль Ну помогите, пожалуйста

Объясните, как мне например создать новый файл как в примере, как прочитать и записать определенные значения, ветви, какие компоненты использовать .Надеюсь на помощь знающих .
Ответить с цитированием
  #4  
Старый 03.01.2008, 02:48
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Создать новый XML-документ:
Код:
procedure TMainForm.Button1Click(Sender: TObject);
var
  XML       : TXMLDocument;
  Paragraf,
  Node      : IXMLNode;
begin
  XML := TXMLDocument.Create(nil);
  try
    XML.Active := True;
    XML.Version := '1.0';
    XML.Encoding := 'UTF-8';
    XML.DocumentElement := XML.CreateNode('document');
    XML.DocumentElement.Attributes['name'] := 'Новый документ';


    Paragraf := XML.DocumentElement.AddChild('paragraf');
    Paragraf.Attributes['justify'] := 'left';

    Node      := Paragraf.AddChild('topindent');
    Node.Text := '12';

    Node      := Paragraf.AddChild('bottomindent');
    Node.Text := '6';

    Node      := Paragraf.AddChild('text');
    Node.Text := 'Здесь текст абзаца';

    XML.SaveToFile('c:\newfile.xml');
  finally
    XML.Free;
  end;
end;
Про XML доступно можно почитать например здесь.
Ответить с цитированием
  #5  
Старый 03.01.2008, 13:22
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Печаль Спасибо,но

Этому я научился, но мне нужно точно такой структуры как в примере, т.е. <t id="ID">TEXT</t>. Может поможете как сделать такой структуры, а то получается либо <t>TEXT</t> либо <t> id="ID"</>, а как мне сделать как в примере, помогите ...
Ответить с цитированием
  #6  
Старый 03.01.2008, 13:55
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Хорошо Получилось !

Вот код
Код:
procedure TForm1.Button5Click(Sender: TObject);
var
Temp:IXMLDOMNode;
 Dom:IxmlDomDocument;
 attr:IXMLDOMAttribute;
 begin
 Dom:=CoDOMDocument.Create;
 try
  DOM.load('D:\test.xml');
  if DOM.parseError.reason<>'' then Label1.Caption:=DOM.parseError.reason;
  Temp:=DOM.createElement('t');
    attr:=DOM.createAttribute('id');
    attr.value:=7;
  Temp.text:='Testings Value';
  Temp.attributes.setNamedItem(attr);
  DOM.getElementsByTagName('page').item[0].appendChild(Temp);
  DOM.save('D:\newtest.xml');
  finally
  DOM:=nil;
 end;
end;
Теперь раскажите пожалуйста как прочитать только, например:
1)всё из 'page id="1"'
2)из 'page id="2"' со значением 't id="1"'...
3)как проверить существование какого-то page с каким-то t id. Буду очень благодарен
Ответить с цитированием
  #7  
Старый 03.01.2008, 14:35
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Печаль неужели никто не знает

Знающие люди, помогите: как прочитать:
1)всё из 'page id="1"'
2)из 'page id="2"' со значением 't id="1"'...
3)как проверить существование какого-то page с каким-то t id. Ну помогите же хоть кто-нибудь.
Ответить с цитированием
  #8  
Старый 03.01.2008, 14:54
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от Oleg
Этому я научился, но мне нужно точно такой структуры как в примере, т.е. <t id="ID">TEXT</t>. Может поможете как сделать такой структуры, а то получается либо <t>TEXT</t> либо <t> id="ID"</>, а как мне сделать как в примере, помогите ...
Код:
Node := XML.DocumentElement.AddChild('t');
Node.Attributes['id'] := 'ID';
Node.Text := 'TEXT';
Ответить с цитированием
  #9  
Старый 03.01.2008, 15:09
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Восклицание И это я умею

И это я умею ведь написал в последнем сообщении, что мне нужно.
Объясните вот что, пожалуйста, как прочитать:
1)всё из 'page id="1"'
2)из 'page id="2"' со значением 't id="1"'...
3)как проверить существование какого-то page с каким-то t id. Ну помогите же хоть кто-нибудь.
Ответить с цитированием
  #10  
Старый 03.01.2008, 15:32
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Я не совсем понимаю, что значит "прочитать все из 'page id="1"? Когда вы открываете XML файл - он прочитан. Вам нужно найти узел <page> с аттрибутом id равным "1"? Или что? Аналогично про другие ваши вопросы - напишите подробнее, чего вы хотите? Что конкретно вызывает затруднения? Я постараюсь помочь.
Ответить с цитированием
  #11  
Старый 03.01.2008, 15:46
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Хорошо Вот что ,конкретно, объясните пожалуйста.

Цитата:
Сообщение от Rosenkrantz
"прочитать все из 'page id="1"? Вам нужно найти узел <page> с аттрибутом id равным "1"? .
Да и прочитать все значения <t id="?"> по порядку, только в <page> с аттрибутом id равным "1". Пожалуйста помогите как это сделать .
2) нужно найти узел <page> с аттрибутом id равным "2" и прочитать значение заданного <t id="?">, например <t id="2">
3)как проверить существование какого-то узла page с каким-то t id.
Если что-то не конкретно или не понятно, то обязательно скажите .
Ответить с цитированием
  #12  
Старый 03.01.2008, 16:18
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Код:
const
  XML_FILE_NAME = 'c:\xmlfile.xml';

function TForm1.OpenFile: TXMLDocument;
begin
  try
    Result        := TXMLDocument.Create(XML_FILE_NAME);
    Result.Active := True;
  except
    on E: Exception do
    begin
      ShowMessage('Ошибка открытия файла ' + XML_FILE_NAME +''#13#13 + E.Message);
      if Result <> nil then
        Result.Free;
      Result := nil;
    end;
  end;
end;

procedure TForm1.btnRead1Click(Sender: TObject);
var
  XML       : TXMLDocument;
  Nodes     : IXMLNodeList;
  PageNode,
  ChildNode : IXMLNode;
begin
  XML := OpenFile;
  if XML = nil then Exit;

  // Найти первый узел <page>.
  // Предполагается, что все узлы <page> лежат на одном уровне.
  Nodes     := XML.DocumentElement.ChildNodes;
  PageNode  := Nodes.FindNode('page');
  while (PageNode <> nil)
    and (PageNode.NodeName = 'page')
    and (PageNode.Attributes['id'] <> '1') do
    PageNode := PageNode.NextSibling;

  // Если PageNode не nil - значит нашли нужный.
  // Если nil - значит такого узла нет.
  if PageNode <> nil then begin
    // Получаем дочерние узлы
    Nodes     := PageNode.ChildNodes;
    // Начиная от первого выводим в Memo1 значения
    ChildNode := Nodes.First;
    while ChildNode <> nil do begin
      Memo1.Lines.Add(ChildNode.Text);
      ChildNode := ChildNode.NextSibling;
    end;
  end;
end;
Это на первый пункт. Остальные два совершенно аналогично делаются, думаю, теперь разберетесь.

UPD: А если на первом уровне не только узлы <page>, то цикл поиска узла надо переписать:
Код:
  while (PageNode <> nil) do
    if (PageNode.NodeName <> 'page') or (PageNode.Attributes['id'] <> '1') then
      PageNode := PageNode.NextSibling
    else
      break;  

Последний раз редактировалось Rosenkrantz, 03.01.2008 в 16:31.
Ответить с цитированием
  #13  
Старый 03.01.2008, 16:37
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Печаль Что-же делать

Увы, ошибка при нажатии кнопки
Acess.... 000000..... Read of Adres 00000....
Ответить с цитированием
  #14  
Старый 03.01.2008, 17:01
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Имя файла правильное прописали в XML_FILE_NAME?
Ответить с цитированием
  #15  
Старый 03.01.2008, 17:04
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Сообщение ДА

ДА, если не правильно, то в обработке ошибок выдается сообщение.
А может потому что было
Код:
function TForm1.OpenFile: TXMLDocument;
а выдавало ошибку и я заменил на:
Код:
function OpenFile: TXMLDocument;
Вряд ли из-за этого. т.к. я вызывал инициализацию Xml прямо из
Код:
procedure TForm1.btnRead1Click(Sender: TObject);
Кстати и её я заменил на:
Код:
procedure TForm1.Button1Click(Sender: TObject);
P.S. компонент только XMLDocument ?

Последний раз редактировалось Oleg, 03.01.2008 в 17:11. Причина: обновление
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter