/* $Id: TestXmlsq.cpp $
* Last updated:
* $Date: 2021-07-16 09:02:00 $
* $Version: 1.0.0 $
*/
/******************************* LICENSE ***********************************
* Copyright (C) 2021 David Ireland, DI Management Services Pty Limited.
* All rights reserved. <www.di-mgt.com.au> <www.cryptosys.net>
* The code in this module is licensed under the terms of the MIT license.
* For a copy, see <http://opensource.org/licenses/MIT>
****************************************************************************
*/
#include <iostream>
#include <string>
#include <clocale>
#include "xmlsq.hpp"
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h> // For ``SetConsoleOutputCP(CP_UTF8);``
#endif
using std::cout;
using std::endl;
int main()
{
std::string qout;
int n;
// Set up console and locale for UTF-8 characters
std::setlocale(LC_ALL, "en_US.utf8");
#ifdef _WIN32
// Save current code page
UINT cpid = GetConsoleCP();
// Set console display page to UTF-8
SetConsoleOutputCP(CP_UTF8);
#endif
cout << "__cplusplus=" << __cplusplus << endl;
// General diagnostics
cout << "xmlsq::Gen::Version=" << xmlsq::Gen::Version() << endl;
cout << "xmlsq::Gen::CompileTime=" << xmlsq::Gen::CompileTime() << endl;
cout << "xmlsq::Gen::ModuleName=" << xmlsq::Gen::ModuleName() << endl;
cout << "xmlsq::Gen::Platform=" << xmlsq::Gen::Platform() << endl;
// xmlsq queries...
cout << "\nQUERIES..." << endl;
qout = xmlsq::Query::FullQuery("bookstore.xml", "/");
cout << "xmlsq::Query::FullQuery = \n" << qout << endl;
qout = xmlsq::Query::GetText("bookstore.xml", "(//title)[2]");
cout << "xmlsq::Query::GetText = [" << qout << "]" << endl;
qout = xmlsq::Query::GetText("bookstore.xml", "(//title)[3]", xmlsq::Query::Asciify | xmlsq::Query::Trim);
cout << "xmlsq::Query::GetText = [" << qout << "]" << endl;
qout = xmlsq::Query::FullQuery("bookstore.xml", "(//title)[3]", xmlsq::Query::Asciify | xmlsq::Query::Trim | xmlsq::Query::Raw);
cout << "xmlsq::Query::FullQuery = [" << qout << "]" << endl;
qout = xmlsq::Query::FullQuery("bookstore.xml", "(//book)[1]");
cout << "xmlsq::Query::FullQuery = \n[" << qout << "]" << endl;
qout = xmlsq::Query::FullQuery("bookstore.xml", "(//book)[1]", xmlsq::Query::Trim | xmlsq::Query::Raw);
cout << "xmlsq::Query::FullQuery = \n[" << qout << "]" << endl;
n = xmlsq::Query::Count("bookstore.xml", "//book");
cout << "xmlsq::Query::Count=" << n << endl;
cout << "Output encoded in UTF-8..." << endl;
qout = xmlsq::Query::GetText("bookstore.xml", "(//title)[3]");
cout << "xmlsq::Query::GetText = [" << qout << "]" << endl;
// Pass XML data as a string parameter
cout << "Pass XML as a string" << endl;
qout = xmlsq::Query::FullQuery("<a><b>abc</b><b>xyz</b></a>", "/", xmlsq::Query::Raw);
cout << qout << endl;
qout = xmlsq::Query::GetText("<a><b>abc</b><b>xyz</b></a>", "//b");
cout << "xmlsq::Query::GetText = [" << qout << "]" << endl;
qout = xmlsq::Query::FullQuery("<a><b>abc</b><b>xyz</b></a>", "//b", xmlsq::Query::Raw);
cout << "xmlsq::Query::FullQuery = [" << qout << "]" << endl;
n = xmlsq::Query::Count("<a><b>abc</b><b>xyz</b></a>", "//b");
cout << "xmlsq::Query::Count=" << n << endl;
std::string xmlstr = "<a><b>abc</b><b foo='bar'>efg</b><b /></a>";
qout = xmlsq::Query::GetText(xmlstr, "/");
cout << qout << endl;
qout = xmlsq::Query::GetText("<a><b>abc</b><b foo='bar'>efg</b><b /></a>", "//b");
cout << "xmlsq::Query::GetText = [" << qout << "]" << endl;
qout = xmlsq::Query::FullQuery(xmlstr, "//b", xmlsq::Query::Raw);
cout << "xmlsq::Query::FullQuery = [" << qout << "]" << endl;
n = xmlsq::Query::Count(xmlstr, "//b");
cout << "xmlsq::Query::Count=" << n << endl;
qout = xmlsq::Query::GetText(xmlstr, "//b[3]");
cout << "xmlsq::Query::GetText = [" << qout << "]" << endl;
n = xmlsq::Query::Count(xmlstr, "//b[3]");
cout << "xmlsq::Query::Count=" << n << endl;
// Errors and exceptions...
cout << "\nERRORS & EXCEPTIONS..." << endl;
try {
qout = xmlsq::Query::GetText("missing.file", "(//title)[2]");
}
catch (std::exception& e) {
cout << e.what() << endl;
}
try {
qout = xmlsq::Query::GetText("badxml.xml", "(//title)[2]");
}
catch (std::exception& e) {
cout << e.what() << endl;
}
try {
qout = xmlsq::Query::GetText("bookstore.xml", "BAD_QUERY\\#ARRGH");
}
catch (std::exception& e) {
cout << e.what() << endl;
}
try {
qout = xmlsq::Query::Count("bookstore.xml", "BAD_QUERY\\#ARRGH");
}
catch (std::exception& e) {
cout << e.what() << endl;
}
#ifdef _WIN32
// Uncomment the next line to restore original console code page
//SetConsoleOutputCP(cpid);
#endif
cout << "\nALL DONE." << endl;
return 0;
}