summaryrefslogtreecommitdiffstats
path: root/ml/dlib/examples/xml_parser_ex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/examples/xml_parser_ex.cpp')
-rw-r--r--ml/dlib/examples/xml_parser_ex.cpp115
1 files changed, 115 insertions, 0 deletions
diff --git a/ml/dlib/examples/xml_parser_ex.cpp b/ml/dlib/examples/xml_parser_ex.cpp
new file mode 100644
index 00000000..0d213959
--- /dev/null
+++ b/ml/dlib/examples/xml_parser_ex.cpp
@@ -0,0 +1,115 @@
+// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
+/*
+
+ This is an example illustrating the use of the xml_parser component in
+ the dlib C++ Library.
+
+ This example simply reads in an xml file and prints the parsing events
+ to the screen.
+*/
+
+
+
+
+#include <dlib/xml_parser.h>
+#include <iostream>
+#include <fstream>
+
+
+using namespace std;
+using namespace dlib;
+
+// ----------------------------------------------------------------------------------------
+
+class doc_handler : public document_handler
+{
+ /*
+ As the parser runs it generates events when it encounters tags and
+ data in an XML file. To be able to receive these events all you have to
+ do is make a class that inherits from dlib::document_handler and
+ implements its virtual methods. Then you simply associate an
+ instance of your class with the xml_parser.
+
+ So this class is a simple example document handler that just prints
+ all the events to the screen.
+ */
+public:
+
+ virtual void start_document (
+ )
+ {
+ cout << "parsing begins" << endl;
+ }
+
+ virtual void end_document (
+ )
+ {
+ cout << "Parsing done" << endl;
+ }
+
+ virtual void start_element (
+ const unsigned long line_number,
+ const std::string& name,
+ const dlib::attribute_list& atts
+ )
+ {
+ cout << "on line " << line_number << " we hit the <" << name << "> tag" << endl;
+
+ // print all the tag's attributes
+ atts.reset();
+ while (atts.move_next())
+ {
+ cout << "\tattribute: " << atts.element().key() << " = " << atts.element().value() << endl;
+ }
+ }
+
+ virtual void end_element (
+ const unsigned long line_number,
+ const std::string& name
+ )
+ {
+ cout << "on line " << line_number << " we hit the closing tag </" << name << ">" << endl;
+ }
+
+ virtual void characters (
+ const std::string& data
+ )
+ {
+ cout << "Got some data between tags and it is:\n" << data << endl;
+ }
+
+ virtual void processing_instruction (
+ const unsigned long line_number,
+ const std::string& target,
+ const std::string& data
+ )
+ {
+ cout << "on line " << line_number << " we hit a processing instruction with a target of '"
+ << target << "' and data '" << data << "'" << endl;
+ }
+};
+
+// ----------------------------------------------------------------------------------------
+
+int main(int argc, char** argv)
+{
+ try
+ {
+ // Check if the user entered an argument to this application.
+ if (argc != 2)
+ {
+ cout << "Please enter an xml file to parse on the command line" << endl;
+ return 1;
+ }
+
+ doc_handler dh;
+ // Now run the parser and tell it to call our doc_handler for each of the parsing
+ // events.
+ parse_xml(argv[1], dh);
+ }
+ catch (std::exception& e)
+ {
+ cout << e.what() << endl;
+ }
+}
+