![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объединение двух XML
Ш-К © (2004-11-01 13:02:00)Есть два документа:
1.
<root>
<item1>
...
</item1>
</root>
2.
<root>
<item2>
...
</item2>
</root>
Нужно получить:
<root>
<item1>
...
</item1>
<item2>
...
</item2>
</root>
Вообщем два документа у которых общий только корневой тег.
Есть ли какие "штатные" способы функции объединения?
Ш-К (2004-11-01 15:24:00) [1]Спасибо. Заработало.
DiamondShark (2004-11-01 15:17:00) [2]Пардон.
elt := iDoc2.documentElement.firstChild;
while elt <> nil do
begin
iDoc1.documentElement.appendChild(elt);
elt := iDoc2.documentElement.firstChild;
end;
После append-а у него уже другой родитель, и, следовательно, совсем другие сиблинги ;)
Ш-К (2004-11-01 14:50:00) [3]Прошу прощения. Что-то не могу заставить работать.
function Union_Roots(S1, S2: WideString): WideString;
var
elt: IXMLDOMNode;
iDoc1, iDoc2: IXMLDOMDocument;
begin
iDoc1 := CoDOMDocument.Create;
iDoc2 := CoDOMDocument.Create;
iDoc1.loadXML(S1);
iDoc2.loadXML(S2);
elt := iDoc2.documentElement.firstChild;
while elt <> nil do
begin
iDoc1.documentElement.appendChild(elt);
elt := elt.nextSibling;
end;
Result := iDoc1.xml;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
S1, S2: String;
begin
S1 := '<root><item0/><item1/></root>';
S2 := '<root><item2/><item3/><item4/></root>';
S1 := Union_Roots(S1, S2);
Memo1.Lines.Text := s1;
end;
DiamondShark (2004-11-01 13:36:00) [4]для msxml:
elt := doc2.documentNode.firstChild;
while elt <> nil do
begin
doc1.documentElement.appendChild(elt);
elt := elt.nextSibling;
end;
Ш-К (2004-11-01 13:21:00) [5]DiamondShark © (01.11.04 13:17) [1]
DOM
Собст-но, я могу только переварить через стринги.
Что, думаю, не есть хорошо.
DiamondShark (2004-11-01 13:17:00) [6]Есть.
1. DOM
2. XSLT
Вам каких?