/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Calibration/xmlBase/xmlBase-00-00-03/src/main.cxx

Go to the documentation of this file.
00001 
00002 
00003 
00004 #include "xmlBase/XmlParser.h"
00005 #include "xmlBase/Dom.h"
00006 #include <xercesc/dom/DOMElement.hpp>
00007 #include <xercesc/dom/DOMNodeList.hpp>
00008 #include "facilities/Util.h"
00009 
00010 #include <string>
00011 #include <iostream>
00012 #include <fstream>
00013 
00021 int main(int argc, char* argv[]) {
00022   XERCES_CPP_NAMESPACE_USE
00023   
00024   std::string infile;
00025   if (argc < 2) { 
00026     infile=std::string("$(XMLBASEROOT)/xml/test.xml");
00027   }
00028   else {
00029     infile = std::string(argv[1]);
00030   }
00031     
00032   facilities::Util::expandEnvVar(&infile);
00033  
00034   xmlBase::XmlParser* parser = new xmlBase::XmlParser(true);
00035 
00036   DOMDocument* doc = 0;
00037   try {
00038     doc = parser->parse(infile.c_str());
00039   }
00040   catch (xmlBase::ParseException ex) {
00041     std::cout << "caught exception with message " << std::endl;
00042     std::cout << ex.getMsg() << std::endl;
00043     delete parser;
00044     return 0;
00045   }
00046 
00047   if (doc != 0) {  // successful
00048     std::cout << "Document successfully parsed" << std::endl;
00049 
00050     // look up some attributes
00051     DOMElement* docElt = doc->getDocumentElement();
00052     DOMElement* attElt = 
00053       xmlBase::Dom::findFirstChildByName(docElt, "ChildWithAttributes");
00054     double doubleVal;
00055     int    intVal;
00056 
00057     try {
00058       intVal = xmlBase::Dom::getIntAttribute(attElt, "goodInt");
00059       std::cout << "goodInt value was " << intVal << std::endl << std::endl;
00060     }
00061     catch (xmlBase::DomException ex) {
00062       std::cout << std::endl << "DomException:  " << ex.getMsg() 
00063                 << std::endl << std::endl;
00064     }
00065       
00066     try {
00067       std::vector<int> ints;
00068       unsigned nInts = xmlBase::Dom::getIntsAttribute(attElt, "goodInts", ints);
00069       std::cout << "Found " << nInts << " goodInts:  " <<  std::endl;
00070       for (unsigned iInt=0; iInt < nInts; iInt++) {
00071         std::cout << ints[iInt] << "  ";
00072       }
00073       std::cout << std::endl << std::endl;
00074     }
00075     catch (xmlBase::DomException ex) {
00076       std::cout << std::endl << "DomException processing goodInts:  " 
00077                 << ex.getMsg() << std::endl << std::endl;
00078     }
00079 
00080     try {
00081       std::vector<double> doubles;
00082       unsigned nD = xmlBase::Dom::getDoublesAttribute(attElt, "goodDoubles", 
00083                                                   doubles);
00084       std::cout << "Found " << nD << " goodDoubles:  " <<  std::endl;
00085       for (unsigned iD=0; iD < nD; iD++) {
00086         std::cout << doubles[iD] << "  ";
00087       }
00088       std::cout << std::endl << std::endl;
00089     }
00090     catch (xmlBase::DomException ex) {
00091       std::cout << std::endl << "DomException processing goodDoubles:  " 
00092                 << ex.getMsg() << std::endl << std::endl;
00093     }
00094 
00095 
00096 
00097     try {
00098       intVal = xmlBase::Dom::getIntAttribute(attElt, "badInt");
00099       std::cout << "badInt value was " << intVal << std::endl << std::endl;
00100     }
00101     catch (xmlBase::DomException ex) {
00102       std::cout << std::endl << "DomException:  " << ex.getMsg() 
00103                 << std::endl << std::endl;
00104     }
00105       
00106     try {
00107       doubleVal = xmlBase::Dom::getDoubleAttribute(attElt, "goodDouble");
00108       std::cout << "goodDouble value was " << doubleVal 
00109                 << std::endl << std::endl;
00110     }
00111     catch (xmlBase::DomException ex) {
00112       std::cout << std::endl << "DomException:  " << ex.getMsg() 
00113                 << std::endl << std::endl;
00114     }
00115 
00116     try {
00117       doubleVal = xmlBase::Dom::getDoubleAttribute(attElt, "badDouble");
00118       std::cout << std::endl << "badDouble value was " << doubleVal 
00119                 << std::endl << std::endl;
00120     }
00121     catch (xmlBase::DomException ex) {
00122       std::cout << std::endl << "DomException:  " << ex.getMsg() 
00123                 << std::endl << std::endl;
00124     }
00125 
00126 
00127     try {
00128       std::vector<double> doubles;
00129       unsigned nD = xmlBase::Dom::getDoublesAttribute(attElt, "badDoubles", 
00130                                                   doubles);
00131       std::cout << "Found " << nD << " badDoubles:  " <<  std::endl;
00132       for (unsigned iD=0; iD < nD; iD++) {
00133         std::cout << doubles[iD] << "  ";
00134       }
00135       std::cout << std::endl << std::endl;
00136     }
00137     catch (xmlBase::DomException ex) {
00138       std::cout << std::endl << "DomException processing badDoubles:  " 
00139                 << ex.getMsg() 
00140                 << std::endl << std::endl;
00141     }
00142 
00143     if (argc > 2) { // attempt to output
00144       char  *hyphen = "-";
00145 
00146       std::ostream* out;
00147 
00148       if (*(argv[2]) == *hyphen) {
00149         out = &std::cout;
00150       }
00151       else {   // try to open file as ostream
00152         char *filename = argv[2];
00153         out = new std::ofstream(filename);
00154       }
00155       *out << "Document source: " << std::string(argv[1]) << std::endl;
00156       *out << std::endl << "Straight print of document:" << std::endl;
00157       xmlBase::Dom::printElement(docElt, *out);
00158       *out << std::endl << std::endl << "Add indentation and line breaks:" 
00159            << std::endl;
00160       xmlBase::Dom::prettyPrintElement(docElt, *out, "");
00161     }
00162   }
00163   delete parser;
00164   return(0);
00165 }

Generated on Tue Nov 29 22:57:57 2016 for BOSS_7.0.2 by  doxygen 1.4.7