Как вставить узел XML

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как вставить узел XML

Сообщение Velial » 31.12.2010 12:39:47

Доброго времени суток.
Поздравляю всех с наступающим Новым Годом!!!
Как в xml вставить узел? Именно вставить, а не добавить в конец.
То есть имеется например такой xml:
Код: Выделить всё
<?xml version="1.0"?>
<register>
  <usuario id="001">
    <nome>name1</nome>
  </usuario>
  <usuario id="002">
    <nome>name2</nome>
  </usuario>
</register>

а надо получить:
Код: Выделить всё
<?xml version="1.0"?>
<register>
  <usuario id="001">
    <nome>name1</nome>
  </usuario>
  <usuario id="003">
    <nome>name3</nome>
  </usuario>
  <usuario id="002">
    <nome>name2</nome>
  </usuario>
</register>

Использую XMLRead, XMLWrite, DOM.
Как это реализовать?
Заранее благодарен всем откликнувшимся.
Velial
новенький
 
Сообщения: 36
Зарегистрирован: 02.07.2010 21:23:11

Re: Как вставить узел XML

Сообщение Polugut » 31.12.2010 13:42:48

InsertBefore создает узел перед указаным, в отличии от AppendChild, который добавляет после крайнего
Polugut
новенький
 
Сообщения: 19
Зарегистрирован: 25.02.2010 23:50:29

Re: Как вставить узел XML

Сообщение Velial » 04.01.2011 13:09:18

Спасибо
Velial
новенький
 
Сообщения: 36
Зарегистрирован: 02.07.2010 21:23:11

Re: Как вставить узел XML

Сообщение dangreen » 21.02.2011 21:04:47

я не могу заставить присвоить узлу вальюм
Код: Выделить всё
Begin
  ReadXMLFile(db,'/usertable.xml');
  dbn:=db.CreateElement('green');
 
  db.DocumentElement.ChildNodes.Item[0].AppendChild(dbn);
  db.FirstChild.FirstChild.FirstChild.NodeValue:='gru';
  WriteXMLFile(db,'/usertable.xml');
end;

таблица до
Код: Выделить всё
<?xml version="1.0"?>
<Hardware>
  <Hardware>
  </Hardware>
</Hardware>

таблица после
Код: Выделить всё
<?xml version="1.0"?>
<Hardware>
  <Hardware>
    <green/>
  </Hardware>
</Hardware>

как видите нод создается а валью нет, что делать?
Аватара пользователя
dangreen
новенький
 
Сообщения: 72
Зарегистрирован: 21.11.2010 20:55:49

Re: Как вставить узел XML

Сообщение Maxizar » 21.02.2011 21:56:05

Ну все же хоть Вы и Я читали вот это: XML Tutorial/ru, все же стоит освежить память :)
Вот пример проги(форма) 3 баттона:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  XMLRead,XMLWrite,DOM;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
    XML:TXMLDocument;
    Node,NNode: TDOMNode;
begin
   ReadXMLFile(XML, 'C:\1.xml');

   Node:=XML.DocumentElement.ChildNodes.Item[0];
  if Node<>nil then
    begin
      NNode:= XML.CreateElement('green');//Создаём родительский узел
      TDOMElement(NNode).SetAttribute('Description', 'Description');// создаём атрибуты родительского узла
      Node.Appendchild(NNode);// добавляем  родительский узел
    end;

  WriteXMLFile(XML,'C:\1.xml');  // записываем всё в XML-файл
FreeAndNil(XML);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    XML:TXMLDocument;
    Node,NNode: TDOMNode;
begin
  ReadXMLFile(XML, 'C:\1.xml');

  Node:=XML.DocumentElement.ChildNodes.Item[0];  //Создаем узел

  if Node<>nil then
    begin
      NNode:= XML.CreateElement('green');//Создаём родительский узел
      NNode.TextContent:='Value';        // создаём текст узла
      Node.Appendchild(NNode);           // добавляем  родительский узел
    end;

  WriteXMLFile(XML,'C:\1.xml');// записываем всё в XML-файл

  FreeAndNil(XML);              //Освобождаем память
end;

procedure TForm1.Button3Click(Sender: TObject);
var
    XML:TXMLDocument;
    Node,NNode: TDOMNode;
begin
   ReadXMLFile(XML, 'C:\1.xml');

   Node:=XML.DocumentElement.ChildNodes.Item[0];
  if Node<>nil then
    begin
      NNode:= XML.CreateElement('green'); //Создаём родительский узел
      NNode.TextContent:='Value'; // создаём текст узла
      TDOMElement(NNode).SetAttribute('Description', 'Description');// создаём атрибуты родительского узла
      Node.Appendchild(NNode);// добавляем  родительский узел
    end;

  WriteXMLFile(XML,'C:\1.xml');  // записываем всё в XML-файл
FreeAndNil(XML);
end;

end.


1Кнопка добавит узел с аттрибутом
Код: Выделить всё
<?xml version="1.0"?>
<Hardware>
  <Hardware>
    <green Description="Description"/>
  </Hardware>
</Hardware>


2Кнопка добавит простой текст в узел
Код: Выделить всё
<?xml version="1.0"?>
<Hardware>
  <Hardware>
    <green>Value</green>
  </Hardware>
</Hardware>


3Кнопка добавит и то и другое
Код: Выделить всё
<?xml version="1.0"?>
<Hardware>
  <Hardware>
    <green Description="Description">Value</green>
  </Hardware>
</Hardware>
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Как вставить узел XML

Сообщение dangreen » 22.02.2011 04:50:02

пасиб! :mrgreen:
Аватара пользователя
dangreen
новенький
 
Сообщения: 72
Зарегистрирован: 21.11.2010 20:55:49

Re: Как вставить узел XML

Сообщение leo_bsv » 24.02.2011 20:55:56

Могу предложить исходники своих экспериментов XMLEditor.zip - в них много чего интересного есть, и как узел вставить и как в дерево загрузить... да и сам редактор практически рабочий - можно использовать для редактирования небольших xml-файлов под линуксом. Мож кому пригодиться. Мож кого на мысли какие умные наведёт. Мож кто допилит его и получицо прикольное программко :?: :D
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Как вставить узел XML

Сообщение Brych » 19.06.2015 16:56:23

Leo_bsv выложи пожалуйста свой XMLEditor снова, а то ссылка уже не действительная, а теперь сам таким занимаюсь и очень интересуют такие наработки. Заранее спасибо! :D
Brych
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.06.2015 01:10:57

Re: Как вставить узел XML

Сообщение leo_bsv » 09.01.2016 01:04:53

Программа переименована в Xedi, качнуть линуксовую версию с исходниками под i386 можно тут.
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 248

Рейтинг@Mail.ru
cron