![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Имеется файл, нужно прочитать только, например:
1)всё из 'page id="1"' 2)из 'page id="2"' со значением 't id="1"'... 3) Как вообще записать что-то типа <t id="ID">test1</t> Помогите плизз ИспользуюКод:
uses MSXML_TLB Последний раз редактировалось Oleg, 02.01.2008 в 19:36. |
|
#2
|
||||
|
||||
|
Может использовать компонент XML Document(сейчас пытаюсь разобраться
, помогите )Как вообще записать вот в такой структуре <t id="ID">test1</t>. Плизз, помогите ![]() Последний раз редактировалось Oleg, 02.01.2008 в 19:37. |
|
#3
|
||||
|
||||
|
Объясните, как мне например создать новый файл как в примере, как прочитать и записать определенные значения, ветви, какие компоненты использовать
.Надеюсь на помощь знающих . |
|
#4
|
|||
|
|||
|
Создать новый 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; |
|
#5
|
||||
|
||||
|
Этому я научился, но мне нужно точно такой структуры как в примере, т.е. <t id="ID">TEXT</t>. Может поможете как сделать такой структуры, а то получается либо <t>TEXT</t> либо <t> id="ID"</>, а как мне сделать как в примере, помогите ...
![]() |
|
#6
|
||||
|
||||
|
Вот код
Код:
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
|
||||
|
||||
|
Знающие люди, помогите:
как прочитать:1)всё из 'page id="1"' 2)из 'page id="2"' со значением 't id="1"'... 3)как проверить существование какого-то page с каким-то t id. Ну помогите же хоть кто-нибудь. ![]() |
|
#8
|
|||
|
|||
|
Цитата:
Код:
Node := XML.DocumentElement.AddChild('t');
Node.Attributes['id'] := 'ID';
Node.Text := 'TEXT'; |
|
#9
|
||||
|
||||
|
И это я умею ведь написал в последнем сообщении, что мне нужно.
Объясните вот что, пожалуйста, как прочитать: 1)всё из 'page id="1"' 2)из 'page id="2"' со значением 't id="1"'... 3)как проверить существование какого-то page с каким-то t id. Ну помогите же хоть кто-нибудь. ![]() |
|
#10
|
|||
|
|||
|
Я не совсем понимаю, что значит "прочитать все из 'page id="1"? Когда вы открываете XML файл - он прочитан. Вам нужно найти узел <page> с аттрибутом id равным "1"? Или что? Аналогично про другие ваши вопросы - напишите подробнее, чего вы хотите? Что конкретно вызывает затруднения? Я постараюсь помочь.
|
|
#11
|
||||
|
||||
|
Цитата:
.2) нужно найти узел <page> с аттрибутом id равным "2" и прочитать значение заданного <t id="?">, например <t id="2"> 3)как проверить существование какого-то узла page с каким-то t id. Если что-то не конкретно или не понятно, то обязательно скажите . |
|
#12
|
|||
|
|||
|
Код:
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
|
||||
|
||||
|
Увы, ошибка при нажатии кнопки
![]() Acess.... 000000..... Read of Adres 00000.... |
|
#14
|
|||
|
|||
|
Имя файла правильное прописали в XML_FILE_NAME?
|
|
#15
|
||||
|
||||
|
ДА, если не правильно, то в обработке ошибок выдается сообщение.
А может потому что было Код:
function TForm1.OpenFile: TXMLDocument; Код:
function OpenFile: TXMLDocument; Код:
procedure TForm1.btnRead1Click(Sender: TObject); Код:
procedure TForm1.Button1Click(Sender: TObject); Последний раз редактировалось Oleg, 03.01.2008 в 17:11. Причина: обновление |