/commoncpp2-1.8.1/demo/xmlfetch.cpp
C++ | 134 lines | 80 code | 13 blank | 41 comment | 3 complexity | c43a8b52ba25b9aaa64fb9a926eb8acd MD5 | raw file
Possible License(s): GPL-2.0
- // Copyright (C) 2001-2005 Open Source Telecom Corporation.
- // Copyright (C) 2006-2008 David Sugar, Tycho Softworks.
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 2 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- //
- // As a special exception to the GNU General Public License, permission is
- // granted for additional uses of the text contained in its release
- // of Common C++.
- //
- // The exception is that, if you link the Common C++ library with other
- // files to produce an executable, this does not by itself cause the
- // resulting executable to be covered by the GNU General Public License.
- // Your use of that executable is in no way restricted on account of
- // linking the Common C++ library code into it.
- //
- // This exception does not however invalidate any other reasons why
- // the executable file might be covered by the GNU General Public License.
- //
- // This exception applies only to the code released under the
- // name Common C++. If you copy code from other releases into a copy of
- // Common C++, as the General Public License permits, the exception does
- // not apply to the code that you add in this way. To avoid misleading
- // anyone as to the status of such modified files, you must delete
- // this exception notice from them.
- //
- // If you write modifications of your own for Common C++, it is your choice
- // whether to permit this exception to apply to your modifications.
- // If you do not wish that, delete this exception notice.
- #include <cc++/common.h>
- #include <iostream>
- #include <cstdlib>
- #ifdef CCXX_NAMESPACES
- using namespace std;
- using namespace ost;
- #endif
- class myXMLParser : public URLStream, public XMLStream
- {
- private:
- void httpHeader(const char *header, const char *value) {
- cout << "HEADER " << header << "=" << value << endl;
- }
- int read(unsigned char *buffer, size_t len) {
- URLStream::read((char *)buffer, len);
- len = gcount();
- return len;
- }
- void startDocument(void) {
- cout << "START DOCUMENT" << endl;
- }
- void endDocument(void) {
- cout << "END DOCUMENT" << endl;
- }
- void characters(const unsigned char *text, size_t len) {
- cout << "CHARS=";
- while(len--)
- cout << *(text++);
- cout << endl;
- }
- void comment(const char *text) {
- cout << "COMMENT=" << text << endl;
- }
- void startElement(const unsigned char *name, const unsigned char **attr) {
- cout << "<" << name;
- if(attr) {
- while(*attr) {
- cout << " " << *(attr++);
- cout << "=" << *(attr++);
- }
- }
- cout << ">" << endl;
- }
- void endElement(const unsigned char *name) {
- cout << "</" << name << ">" << endl;
- }
- public:
- void Close(void) {
- URLStream::close();
- }
- };
- int main(int argc, char **argv)
- {
- myXMLParser xml;
- URLStream::Error status;
- // url.setProxy("home.sys", 8000);
- #ifdef CCXX_EXCEPTIONS
- try {
- #endif
- while(--argc) {
- ++argv;
- cout << "fetching " << *argv << endl;
- status = xml.get(*argv);
- if(status) {
- cout << "failed; reason=" << status << endl;
- xml.Close();
- continue;
- }
- cout << "Parsing..." << endl;
- if(!xml.parse())
- cout << "not well formed..." << endl;
- xml.Close();
- cout << ends;
- }
- #ifdef CCXX_EXCEPTIONS
- }
- catch(...) {
- cerr << "url " << *argv << " failed" << endl;
- }
- #endif
- }