summaryrefslogtreecommitdiff
path: root/libxsd-tests/cxx/tree/basic/driver.cxx
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2020-12-18 18:48:46 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2021-02-25 13:45:48 +0300
commit5e527213a2430bb3018e5eebd909aef294edf9b5 (patch)
tree94de33c82080b53d9a9e300170f6d221d89078f4 /libxsd-tests/cxx/tree/basic/driver.cxx
parent7420f85ea19b0562ffdd8123442f32bc8bac1267 (diff)
Switch to build2
Diffstat (limited to 'libxsd-tests/cxx/tree/basic/driver.cxx')
-rw-r--r--libxsd-tests/cxx/tree/basic/driver.cxx65
1 files changed, 65 insertions, 0 deletions
diff --git a/libxsd-tests/cxx/tree/basic/driver.cxx b/libxsd-tests/cxx/tree/basic/driver.cxx
new file mode 100644
index 0000000..d36d31e
--- /dev/null
+++ b/libxsd-tests/cxx/tree/basic/driver.cxx
@@ -0,0 +1,65 @@
+// file : cxx/tree/basic/driver.cxx
+// copyright : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#include <cassert>
+#include <iostream>
+
+#include <xercesc/dom/DOMText.hpp>
+#include <xercesc/dom/DOMElement.hpp>
+#include <xercesc/dom/DOMDocument.hpp>
+
+// Define XSD_CXX11 since we include libxsd headers directly.
+//
+#ifdef _MSC_VER
+# if _MSC_VER >= 1600 // VC++10 and later have C++11 always enabled.
+# define XSD_CXX11
+# endif
+#else
+# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
+# define XSD_CXX11
+# endif
+#endif
+
+#include <xsd/cxx/xml/qualified-name.hxx>
+
+#include <xsd/cxx/xml/dom/auto-ptr.hxx> // XSD_DOM_AUTO_PTR
+#include <xsd/cxx/xml/dom/elements.hxx> // name()
+#include <xsd/cxx/xml/dom/parsing-source.hxx> // parser, parse()
+
+#include <xsd/cxx/tree/text.hxx> // text_content()
+#include <xsd/cxx/tree/parsing.hxx>
+#include <xsd/cxx/tree/elements.hxx> // auto_initializer, properties
+#include <xsd/cxx/tree/exceptions.hxx> // parsing
+#include <xsd/cxx/tree/error-handler.hxx>
+
+using namespace std;
+using namespace xsd::cxx;
+
+// Usage: argv[0] <xml-file>
+//
+// Parse the specified XML file using the XML DOM parser and print the element
+// names and values to stdout.
+//
+int
+main (int argc, char* argv[])
+{
+ assert (argc == 2);
+
+ xml::auto_initializer ai;
+
+ tree::error_handler<char> h;
+ tree::properties<char> ps;
+
+ XSD_DOM_AUTO_PTR<xercesc::DOMDocument> d (
+ xml::dom::parse<char> (argv[1], h, ps, 0 /* flags */));
+
+ h.throw_if_failed<tree::parsing<char>> (); // Abort on error.
+
+ xml::dom::parser<char> p (*d->getDocumentElement (), true, false, false);
+ for (; p.more_content (); p.next_content (false /* text */))
+ {
+ const xercesc::DOMElement& i (p.cur_element ());
+ const xml::qualified_name<char> n (xml::dom::name<char> (i));
+ cout << n.name () << ' ' << tree::text_content<char> (i) << endl;
+ }
+}