Для того, чтобы получить возможность использовать несколько XML-файлов, нужно исследовать, как в одно DOM-дерево загрузить последовательно несколько XML-файлов с помощью libxml2.
Добавил поддержку вставки файлов: commit 7ef28af3b6d2322cd724295c63a972b6f813fa1a Author: Vitaly Lipatov <lav@etersoft.ru> Date: Fri Dec 17 02:56:46 2010 +0300 UniXML: support for XInclude (see eterbug #6304) diff --git a/src/Various/UniXML.cc b/src/Various/UniXML.cc index efbf17a..c51a0ec 100644 --- a/src/Various/UniXML.cc +++ b/src/Various/UniXML.cc @@ -34,6 +34,7 @@ #include "UniSetTypes.h" #include "UniXML.h" #include "Exceptions.h" +#include <libxml/xinclude.h> using namespace UniSetTypes; using namespace std; @@ -91,6 +92,12 @@ void UniXML::open(const string _filename) doc = xmlParseFile(_filename.c_str()); if(doc == NULL) throw NameNotFound("UniXML(open): NotFound file="+_filename); ... + xmlXIncludeProcess(doc); + cur = getFirstNode(); filename = _filename; } Использовать так: <TAG xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="test2.xml"/> </TAG> Отсутствие файла будет проигнорировано, с предупреждением.
(В ответ на comment #1) > Добавил поддержку вставки файлов: Эх... я не успел закомитить...
На всякий запишу и сюда. Если требуется вставить только часть файла, то записывается это так: <xi:include href="test2.xml" parse="xml" xpointer="xpointer(/sensors/*)"/> в данном случае из файла test2.xml вставляется секция <sensors> (без корневых тегов!).