xmlparser.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <iostream>
00024
00025 #include "xmlparser.h"
00026
00027
00028 namespace Barry {
00029
00030 namespace XML {
00031
00032
00033 XMLParser::XMLParser(std::istream& input, const char *charset)
00034 : xmlpp::SaxParser()
00035 , input(input)
00036 {
00037 this->depth = 0;
00038 this->charset = charset;
00039 }
00040
00041
00042 XMLParser::~XMLParser(void)
00043 {
00044 }
00045
00046
00047 const unsigned long XMLParser::GetDepth(void) const
00048 {
00049 return depth;
00050 }
00051
00052
00053 bool XMLParser::Run(void)
00054 {
00055 try {
00056 set_substitute_entities(true);
00057 parse_chunk("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>");
00058
00059 std::string line;
00060 while( getline(input, line) ) {
00061 parse_chunk(line);
00062 }
00063 finish_chunk_parsing();
00064 }
00065 catch (const xmlpp::exception& ex) {
00066 std::cout << "libxml++ exception: " << ex.what() << std::endl;
00067 return false;
00068 }
00069
00070 return true;
00071 }
00072
00073
00074 void XMLParser::on_start_document()
00075 {
00076 std::cout << "on_start_document()" << std::endl;
00077 }
00078
00079
00080 void XMLParser::on_end_document()
00081 {
00082 std::cout << "on_end_document()" << std::endl;
00083 }
00084
00085
00086 void XMLParser::on_start_element(const Glib::ustring& name,
00087 const xmlpp::SaxParser::AttributeList& attributes)
00088 {
00089 std::cout << "Start:" << name << std::endl;
00090 depth++;
00091
00092
00093 for (xmlpp::SaxParser::AttributeList::const_iterator iter = attributes.begin(); iter != attributes.end(); ++iter) {
00094 std::cout << " Attribute name=" << iter->name << std::endl;
00095
00096 std::cout << " , value= " << iter->value << std::endl;
00097 }
00098 }
00099
00100
00101 void XMLParser::on_end_element(const Glib::ustring& name)
00102 {
00103 std::cout << "End:" << name << std::endl;
00104 depth--;
00105 }
00106
00107
00108 void XMLParser::on_characters(const Glib::ustring& text)
00109 {
00110 std::cout << " Data:" << text << std::endl;
00111 }
00112
00113
00114 void XMLParser::on_comment(const Glib::ustring& text)
00115 {
00116 std::cout << "on_comment(): " << text << std::endl;
00117 }
00118
00119
00120 void XMLParser::on_warning(const Glib::ustring& text)
00121 {
00122 std::cout << "on_warning(): " << text << std::endl;
00123 }
00124
00125
00126 void XMLParser::on_error(const Glib::ustring& text)
00127 {
00128 std::cout << "on_error(): " << text << std::endl;
00129 }
00130
00131
00132 void XMLParser::on_fatal_error(const Glib::ustring& text)
00133 {
00134 std::cout << "on_fatal_error(): " << text << std::endl;
00135 }
00136
00137
00138 }
00139
00140 }
00141