Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизОбъединение двух 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 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c