![]() |
|
|
Регистрация | << Правила форума >> | 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. Причина: обновление |