Вниз
Скачать: CL | DM;

Объединение двух XML   Найти похожие ветки 

← →
Ш-К   (2004-11-01 13:02) [0]

Есть два документа:
1.
<root>
<item1>
 ...
</item1>
</root>

2.
<root>
<item2>
 ...
</item2>
</root>

Нужно получить:

<root>
<item1>
 ...
</item1>
<item2>
 ...
</item2>
</root>

Вообщем два документа у которых общий только корневой тег.
Есть ли какие "штатные" способы функции объединения?


← →
DiamondShark ©   (2004-11-01 13:17) [1]

Есть.
1. DOM
2. XSLT
Вам каких?


← →
Ш-К   (2004-11-01 13:21) [2]

DiamondShark ©   (01.11.04 13:17) [1]
DOM
Собст-но, я могу только переварить через стринги.
Что, думаю, не есть хорошо.


← →
DiamondShark ©   (2004-11-01 13:36) [3]

для msxml:

elt := doc2.documentNode.firstChild;
while elt <> nil do
 begin
   doc1.documentElement.appendChild(elt);
   elt := elt.nextSibling;
 end;


← →
Ш-К   (2004-11-01 14:50) [4]

Прошу прощения. Что-то не могу заставить работать.

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 15:17) [5]

Пардон.

elt := iDoc2.documentElement.firstChild;
while elt <> nil do
 begin
   iDoc1.documentElement.appendChild(elt);
   elt := iDoc2.documentElement.firstChild;
 end;

После append-а у него уже другой родитель, и, следовательно, совсем другие сиблинги ;)


← →
Ш-К   (2004-11-01 15:24) [6]

Спасибо. Заработало.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.036 c
4-1096801148
SergeyM
2004-10-03 14:59
2004.11.14
Сообщение в HEX формате


11-1082701044
Ajax
2004-04-23 10:17
2004.11.14
Определение даты созания файла


3-1097566777
by
2004-10-12 11:39
2004.11.14
Использование естественных ключей допустимо?


4-1096206369
nomshar
2004-09-26 17:46
2004.11.14
Dll injection


1-1099029748
dms_main
2004-10-29 10:02
2004.11.14
Dll и TThread




   Наверх