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