00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef SEMAINE_UTIL_XMLTOOL_H
00011 #define SEMAINE_UTIL_XMLTOOL_H
00012
00013
00014 #include <semaine/config.h>
00015
00016 #include <semaine/cms/exceptions/MessageFormatException.h>
00017 #include <semaine/cms/exceptions/SystemConfigurationException.h>
00018
00019 #include <list>
00020
00021 #include <xercesc/parsers/XercesDOMParser.hpp>
00022 #include <xercesc/dom/DOM.hpp>
00023 #include <xercesc/util/XMLString.hpp>
00024 #include <xercesc/util/PlatformUtils.hpp>
00025 #include <xercesc/framework/MemBufInputSource.hpp>
00026 #include <xercesc/framework/MemBufFormatTarget.hpp>
00027
00028 #if defined(XERCES_NEW_IOSTREAMS)
00029 #include <iostream>
00030 #else
00031 #include <iostream.h>
00032 #endif
00033
00034 #include <xqilla/utils/XQillaPlatformUtils.hpp>
00035 #include <xqilla/xqilla-dom3.hpp>
00036
00037
00038 #include <semaine/util/ParseErrorHandler.h>
00039
00040
00041 namespace semaine {
00042 namespace util {
00043
00047 struct XMLStringCmp {
00048 bool operator()( const XMLCh* s1, const XMLCh* s2 ) const {
00049 return XERCES_CPP_NAMESPACE::XMLString::compareString( s1, s2 ) < 0;
00050 }
00051 };
00052
00053 class XMLTool
00054 {
00055 public:
00059 static void startupXMLTools()
00060 throw (semaine::cms::exceptions::SystemConfigurationException);
00061
00065 static void shutdownXMLTools();
00066
00070 static XERCES_CPP_NAMESPACE::DOMImplementation * getDOMImplementation();
00071
00076 static const std::string transcode(const XMLCh * xmlString);
00077
00078 static XERCES_CPP_NAMESPACE::DOMDocument * parse(const std::string & xmlAsText)
00079 throw (semaine::cms::exceptions::MessageFormatException);
00080
00081 static XERCES_CPP_NAMESPACE::DOMDocument * parseFile(const std::string & filename)
00082 throw (semaine::cms::exceptions::MessageFormatException);
00083
00091 static XERCES_CPP_NAMESPACE::DOMDocument * newDocument(const std::string & rootTagname, const std::string & aNamespace);
00092
00102 static XERCES_CPP_NAMESPACE::DOMDocument * newDocument(const std::string & rootTagname, const std::string & aNamespace, const std::string & version);
00103
00111 static XERCES_CPP_NAMESPACE::DOMElement * createElement(XERCES_CPP_NAMESPACE::DOMDocument * doc, const std::string & elementName);
00112
00113
00124 static XERCES_CPP_NAMESPACE::DOMElement * createElement(XERCES_CPP_NAMESPACE::DOMDocument * doc, const std::string & elementName, const std::string & aNamespace);
00125
00126
00134 static XERCES_CPP_NAMESPACE::DOMText * createTextNode(XERCES_CPP_NAMESPACE::DOMDocument * doc, const std::string & textContent);
00135
00143 static XERCES_CPP_NAMESPACE::DOMElement * appendChildElement(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName);
00144
00152 static XERCES_CPP_NAMESPACE::DOMElement * appendChildElement(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName, const std::string & childNamespace);
00153
00160 static XERCES_CPP_NAMESPACE::DOMText * appendChildTextNode(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & textContent);
00161
00162
00166 static bool hasAttribute(XERCES_CPP_NAMESPACE::DOMElement * e, const std::string & attributeName);
00167
00168
00176 static const std::string getAttribute(XERCES_CPP_NAMESPACE::DOMElement * e, const std::string & attributeName);
00177
00186 static const std::string needAttribute(XERCES_CPP_NAMESPACE::DOMElement * e, const std::string & attributeName)
00187 throw(semaine::cms::exceptions::MessageFormatException);
00188
00192 static void setAttribute(XERCES_CPP_NAMESPACE::DOMElement * e, const std::string & attribute, const std::string & value);
00193
00197 static const std::string getNamespaceURI(XERCES_CPP_NAMESPACE::DOMNode * node);
00198
00202 static const std::string getNodeName(XERCES_CPP_NAMESPACE::DOMNode * node);
00203
00207 static const std::string getTagName(XERCES_CPP_NAMESPACE::DOMElement * e);
00208
00212 static const std::string getLocalName(XERCES_CPP_NAMESPACE::DOMElement * e);
00213
00217 static const std::string getPrefix(XERCES_CPP_NAMESPACE::DOMElement * e);
00218
00222 static void setPrefix(XERCES_CPP_NAMESPACE::DOMElement * e, const std::string & prefix);
00223
00224
00228 static const std::string getTextContent(XERCES_CPP_NAMESPACE::DOMNode * node);
00229
00233 static void setTextContent(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & text);
00234
00243 static XERCES_CPP_NAMESPACE::DOMElement * getChildElementByTagNameNS(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName, const std::string & childNamespace);
00244
00253 static XERCES_CPP_NAMESPACE::DOMElement * getChildElementByLocalNameNS(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName, const std::string & childNamespace);
00254
00265 static XERCES_CPP_NAMESPACE::DOMElement * needChildElementByTagNameNS(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName, const std::string & childNamespace)
00266 throw(semaine::cms::exceptions::MessageFormatException);
00267
00278 static XERCES_CPP_NAMESPACE::DOMElement * needChildElementByLocalNameNS(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName, const std::string & childNamespace)
00279 throw(semaine::cms::exceptions::MessageFormatException);
00280
00292 static std::list<XERCES_CPP_NAMESPACE::DOMElement *> * getChildrenByTagNameNS(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName, const std::string & childNamespace)
00293 throw(semaine::cms::exceptions::MessageFormatException);
00294
00306 static std::list<XERCES_CPP_NAMESPACE::DOMElement *> * getChildrenByLocalNameNS(XERCES_CPP_NAMESPACE::DOMNode * node, const std::string & childName, const std::string & childNamespace)
00307 throw(semaine::cms::exceptions::MessageFormatException);
00308
00309
00313 static const std::string dom2string(const XERCES_CPP_NAMESPACE::DOMDocument * doc);
00314
00315 private:
00316 static XERCES_CPP_NAMESPACE::DOMLSParser * parser;
00317 static XERCES_CPP_NAMESPACE::DOMImplementationLS * impl;
00318
00319 };
00320
00321 }
00322 }
00323
00324
00325
00326 #endif
00327