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 #include "Teuchos_ExpatHandlerAdapter.hpp"
00030
00031 #ifdef HAVE_TEUCHOS_EXPAT
00032
00033 #include "Teuchos_TreeBuildingXMLHandler.hpp"
00034
00035 using namespace Teuchos;
00036
00037 void expatStartElementHandler(void* handler,
00038 const XML_Char* name,
00039 const XML_Char** attr)
00040 {
00041 TreeBuildingXMLHandler* h = (TreeBuildingXMLHandler*) handler;
00042
00043 std::string tag = name;
00044 Teuchos::map<std::string, std::string> attributes;
00045
00046
00047
00048
00049 for (int i=0; attr[i] != 0; i+=2)
00050 {
00051 std::string key = attr[i];
00052 std::string val = attr[i+1];
00053 attributes[key] = val;
00054 }
00055
00056 h->startElement(tag, attributes);
00057 }
00058
00059 void expatEndElementHandler(void* handler,
00060 const XML_Char* name)
00061 {
00062 TreeBuildingXMLHandler* h = (TreeBuildingXMLHandler*) handler;
00063
00064 std::string tag = name;
00065
00066 h->endElement(tag);
00067 }
00068
00069 void expatCharacterDataHandler(void* handler,
00070 const XML_Char* s,
00071 int len)
00072 {
00073 char* str = new char[len+1];
00074 strncpy(str, s, len);
00075
00076
00077 str[len] = '\0';
00078 std::string chars = str;
00079
00080 TreeBuildingXMLHandler* h = (TreeBuildingXMLHandler*) handler;
00081 h->characters(chars);
00082 delete [] str;
00083 }
00084
00085 #endif // HAVE_TEUCHOS_EXPAT