123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // file : tests/roundtrip/driver.cxx
- // copyright : Copyright (c) 2013-2014 Code Synthesis Tools CC
- // license : MIT; see accompanying LICENSE file
- #include <string>
- #include <fstream>
- #include <cassert>
- #include <iostream>
- #include <xml/parser>
- #include <xml/serializer>
- using namespace std;
- using namespace xml;
- const bool trace = false;
- int
- main (int argc, char* argv[])
- {
- if (argc != 2)
- {
- cerr << "usage: " << argv[0] << " <xml-file>" << endl;
- return 1;
- }
- try
- {
- ifstream ifs;
- ifs.exceptions (ifstream::badbit | ifstream::failbit);
- ifs.open (argv[1], ifstream::in | ifstream::binary);
- parser p (ifs,
- argv[1],
- parser::receive_default |
- parser::receive_attributes_event |
- parser::receive_namespace_decls);
- serializer s (cout, "out", 0);
- bool in_attr (false);
- for (parser::event_type e (p.next ()); e != parser::eof; e = p.next ())
- {
- switch (e)
- {
- case parser::start_element:
- {
- if (trace)
- cerr << p.line () << ':' << p.column () << ": " << e << " "
- << p.namespace_() << (p.namespace_().empty () ? "" : "#")
- << p.prefix () << (p.prefix ().empty () ? "" : ":")
- << p.name () << endl;
- s.start_element (p.qname ());
- break;
- }
- case parser::end_element:
- {
- if (trace)
- cerr << p.line () << ':' << p.column () << ": " << e << " "
- << p.namespace_() << (p.namespace_().empty () ? "" : "#")
- << p.prefix () << (p.prefix ().empty () ? "" : ":")
- << p.name () << endl;
- s.end_element ();
- break;
- }
- case parser::start_namespace_decl:
- {
- if (trace)
- cerr << " " << p.prefix () << "->" << p.namespace_ () << endl;
- s.namespace_decl (p.namespace_ (), p.prefix ());
- break;
- }
- case parser::end_namespace_decl:
- {
- if (trace)
- cerr << " " << p.prefix () << "-x" << endl;
- break;
- }
- case parser::start_attribute:
- {
- if (trace)
- cerr << " " << p.qname () << "=";
- s.start_attribute (p.qname ());
- in_attr = true;
- break;
- }
- case parser::end_attribute:
- {
- s.end_attribute ();
- in_attr = false;
- break;
- }
- case parser::characters:
- {
- if (trace)
- {
- if (!in_attr)
- cerr << p.line () << ':' << p.column () << ": " << e << " ";
- cerr << "'" << p.value () << "'" << endl;
- }
- s.characters (p.value ());
- break;
- }
- default:
- break;
- }
- }
- }
- catch (const ios_base::failure&)
- {
- cerr << "io failure" << endl;
- return 1;
- }
- catch (const xml::exception& e)
- {
- cerr << e.what () << endl;
- return 1;
- }
- }
|