summaryrefslogtreecommitdiffstats
path: root/xmlserializer
diff options
context:
space:
mode:
Diffstat (limited to 'xmlserializer')
-rw-r--r--xmlserializer/XmlFileDocSource.cpp27
-rw-r--r--xmlserializer/XmlFileDocSource.h11
2 files changed, 35 insertions, 3 deletions
diff --git a/xmlserializer/XmlFileDocSource.cpp b/xmlserializer/XmlFileDocSource.cpp
index 4df2ad1..53e7c86 100644
--- a/xmlserializer/XmlFileDocSource.cpp
+++ b/xmlserializer/XmlFileDocSource.cpp
@@ -24,6 +24,7 @@
#include "XmlFileDocSource.h"
#include <libxml/parser.h>
+#include <libxml/xinclude.h>
#define base CXmlDocSource
@@ -32,7 +33,7 @@ CXmlFileDocSource::CXmlFileDocSource(const string& strXmlInstanceFile,
const string& strRootElementType,
const string& strRootElementName,
const string& strNameAttrituteName) :
- base(xmlReadFile(strXmlInstanceFile.c_str(),NULL, 0),
+ base(readFile(strXmlInstanceFile),
strXmlSchemaFile,
strRootElementType,
strRootElementName,
@@ -44,7 +45,7 @@ CXmlFileDocSource::CXmlFileDocSource(const string& strXmlInstanceFile,
CXmlFileDocSource::CXmlFileDocSource(const string& strXmlInstanceFile,
const string& strXmlSchemaFile,
const string& strRootElementType) :
- base(xmlReadFile(strXmlInstanceFile.c_str(), NULL, 0),
+ base(readFile(strXmlInstanceFile),
strXmlSchemaFile,
strRootElementType),
_strXmlInstanceFile(strXmlInstanceFile)
@@ -66,7 +67,7 @@ bool CXmlFileDocSource::isParsable(CXmlSerializingContext& serializingContext) c
bool CXmlFileDocSource::populate(CXmlSerializingContext& serializingContext)
{
- if (!base::validate(serializingContext)) {
+ if (!validate(serializingContext)) {
// Add the file's name in the error message
serializingContext.appendLineToError("File : " + _strXmlInstanceFile);
@@ -76,3 +77,23 @@ bool CXmlFileDocSource::populate(CXmlSerializingContext& serializingContext)
return true;
}
+
+_xmlDoc* CXmlFileDocSource::readFile(const string& strFileName)
+{
+ // Read xml file
+ xmlDocPtr pDoc = xmlReadFile(strFileName.c_str(), NULL, 0);
+
+ if (!pDoc) {
+
+ return NULL;
+ }
+ // Process file inclusion
+ // WARNING: this symbol is available if libxml2 has been compiled with LIBXML_XINCLUDE_ENABLED
+ if (xmlXIncludeProcess(pDoc) < 0) {
+
+ xmlFreeDoc(pDoc);
+ return NULL;
+ }
+
+ return pDoc;
+}
diff --git a/xmlserializer/XmlFileDocSource.h b/xmlserializer/XmlFileDocSource.h
index 98ba6e3..1efafe2 100644
--- a/xmlserializer/XmlFileDocSource.h
+++ b/xmlserializer/XmlFileDocSource.h
@@ -73,6 +73,17 @@ public:
virtual bool isParsable(CXmlSerializingContext& serializingContext) const;
private:
+ /**
+ * Read xml file
+ *
+ * This function reads an xml file and processes eventual included files
+ * WARNING: to compile this function, libxml2 has to be compiled with LIBXML_XINCLUDE_ENABLED
+ *
+ * @param[in] strFileName the file name
+ *
+ * @return a pointer to generated xml document object
+ */
+ static _xmlDoc* readFile(const string& strFileName);
/**
* Instance file