00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef XMLUTILS_H
00019 #define XMLUTILS_H
00020
00021
00022 #include "smbios/compat.h"
00023
00024 #include <xercesc/util/PlatformUtils.hpp>
00025 #include <xercesc/dom/DOM.hpp>
00026 #include <xercesc/dom/DOMImplementationLS.hpp>
00027 #include <xercesc/framework/StdOutFormatTarget.hpp>
00028 #include <xercesc/framework/LocalFileFormatTarget.hpp>
00029 #include <xercesc/parsers/XercesDOMParser.hpp>
00030 #include <xercesc/util/XMLUni.hpp>
00031 #include <xercesc/framework/MemBufInputSource.hpp>
00032 #include <xercesc/framework/Wrapper4InputSource.hpp>
00033
00034 #include "ExceptionImpl.h"
00035
00036 #define X(x) XMLString::transcode(x)
00037
00038 #define xmlDocGetRootElement(doc) doc->getDocumentElement()
00039 #define SETUP_XML_NAMESPACE XERCES_CPP_NAMESPACE_USE
00040 #define XML_NAMESPACE XERCES_CPP_NAMESPACE_QUALIFIER
00041 #define CHECK_VERSION_COMPAT
00042 #define InitXML XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::Initialize
00043 #define FiniXML XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::Terminate
00044 #define xmlFreeParser(parser) do{parser->resetDocumentPool(); parser->release();parser=0;}while(0)
00045 #define xmlFreeDoc(doc) do{doc=0;}while(0)
00046
00047 #define compatXmlReadFile(parser, doc, name) do{try{doc = parser->parseURI(name);}catch( const std::exception & ){}}while(0)
00048
00049
00050
00051
00052 #define compatXmlReadMemory(parser, doc, str, len) \
00053 do{ \
00054 try \
00055 { \
00056 MemBufInputSource* memBufIs = new MemBufInputSource( \
00057 reinterpret_cast<const XMLByte*>(stdXml), \
00058 len, \
00059 "standard_xml", \
00060 false ); \
00061 DOMInputSource* Is = new Wrapper4InputSource( memBufIs ); \
00062 doc = parser->parse( *Is ); \
00063 delete Is; \
00064 } \
00065 catch (const std::exception &)\
00066 {} \
00067 }while(0)
00068
00069 namespace xmlutils
00070 {
00071
00072
00073
00074 DECLARE_EXCEPTION( XmlUtilsException );
00075 DECLARE_EXCEPTION_EX( NotFound, xmlutils, XmlUtilsException );
00076 DECLARE_EXCEPTION_EX( Invalid, xmlutils, XmlUtilsException );
00077
00078
00079
00080 DEFINE_EXCEPTION_EX( NotFoundImpl, xmlutils, NotFound );
00081 DEFINE_EXCEPTION_EX( InvalidImpl, xmlutils, Invalid );
00082
00083 XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *castNode2Element( XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *node );
00084 const XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *castNode2Element( const XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *node );
00085
00086 std::string safeXMLChToString( const XMLCh *src );
00087
00088 std::string safeGetAttribute( const XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *node, const std::string &attr );
00089
00090 XERCES_CPP_NAMESPACE_QUALIFIER DOMBuilder *getParser( );
00091
00092 XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *findElement( XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *root, const std::string elementName, const std::string &attribute, const std::string &value );
00093 XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *findElementWithNumericAttr( XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *root, const std::string elementName, const std::string &attribute, long value);
00094
00095 std::string getNodeText( XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *elem );
00096 int getNumberFromXmlAttr( XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *element, const std::string field, int base );
00097 }
00098
00099 #endif