|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите пожалуйста разобраться с XML
Имеется файл, нужно прочитать только, например:
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. Причина: обновление |