XmlTools.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef XMLTOOLS_HPP_
00037 #define XMLTOOLS_HPP_
00038
00039 #include <string>
00040 #include <vector>
00041
00042 #include <xercesc/dom/DOMDocument.hpp>
00043 #include <xercesc/dom/DOMNode.hpp>
00044 #include <xercesc/dom/DOMElement.hpp>
00045 #include <xercesc/util/XercesDefs.hpp>
00046
00047 #include <xsd/cxx/version.hxx>
00048 #include <xsd/cxx/xml/string.hxx>
00049 #include <xsd/cxx/xml/dom/auto-ptr.hxx>
00050 #include <xsd/cxx/tree/error-handler.hxx>
00051 #include <xsd/cxx/tree/elements.hxx>
00052
00053 #ifndef X //Also used in XSD code for XdmfMeshWriter
00054
00058 #define X(str) xsd::cxx::xml::string(str).c_str()
00059 #endif //X
00060
00065 #define X2C(str) xsd::cxx::xml::transcode<char>(str)
00066
00070 class XmlTools
00071 {
00072 public:
00082 static xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> ReadXmlFile(
00083 const std::string& rFileName,
00084 const ::xsd::cxx::tree::properties<char>& rProps,
00085 bool validate=true);
00086
00096 static void Finalize();
00097
00101 class Finalizer
00102 {
00103 public:
00108 Finalizer(bool init);
00109
00113 ~Finalizer();
00114 };
00115
00131 static xsd::cxx::xml::dom::auto_ptr<xercesc::DOMDocument> ReadFileToDomDocument(
00132 const std::string& rFileName,
00133 ::xsd::cxx::xml::error_handler<char>& rErrorHandler,
00134 const ::xsd::cxx::tree::properties<char>& rProps,
00135 bool validate=true);
00136
00144 static void PrintNode(const std::string& rMsg, xercesc::DOMNode* pNode, bool showChildren=false);
00145
00157 static xercesc::DOMElement* SetNamespace(xercesc::DOMDocument* pDocument,
00158 xercesc::DOMElement* pElement,
00159 const std::string& rNamespace);
00160
00172 static xercesc::DOMElement* SetNamespace(xercesc::DOMDocument* pDocument,
00173 xercesc::DOMElement* pElement,
00174 const XMLCh* pNamespace);
00175
00187 static void WrapContentInElement(xercesc::DOMDocument* pDocument,
00188 xercesc::DOMElement* pElement,
00189 const XMLCh* pNewElementLocalName);
00190
00196 static std::vector<xercesc::DOMElement*> GetChildElements(const xercesc::DOMElement* pElement);
00197
00204 static std::vector<xercesc::DOMElement*> FindElements(const xercesc::DOMElement* pContextElement,
00205 const std::string& rPath);
00206
00216 static void FindElements(const xercesc::DOMElement* pContextElement,
00217 const std::vector<std::string>& rNames,
00218 std::vector<xercesc::DOMElement*>& rResults,
00219 unsigned depth=0);
00220
00229 static std::string EscapeSpaces(const std::string& rPath);
00230
00231 };
00232
00233 #endif