src/XMLCommand.h
branchv_0
changeset 3 4b566dee1a57
parent 2 3ab78bf63467
child 4 1363ec0879ca
equal deleted inserted replaced
2:3ab78bf63467 3:4b566dee1a57
    34 
    34 
    35 namespace relpipe {
    35 namespace relpipe {
    36 namespace in {
    36 namespace in {
    37 namespace xml {
    37 namespace xml {
    38 
    38 
       
    39 using namespace relpipe::writer;
       
    40 using namespace xercesc;
       
    41 
    39 class XMLCommand {
    42 class XMLCommand {
       
    43 private:
       
    44 
       
    45 	class RelpipeSaxHandler : public xercesc::DefaultHandler {
       
    46 	private:
       
    47 		unique_ptr<RelationalWriter> writer;
       
    48 
       
    49 	public:
       
    50 
       
    51 		RelpipeSaxHandler(std::ostream& output) : DefaultHandler(), writer(Factory::create(output)) {
       
    52 		}
       
    53 
       
    54 		void startElement(const XMLCh * const uri, const XMLCh * const localname, const XMLCh * const qname, const Attributes& attrs) override {
       
    55 			//XMLString::
       
    56 			// TODO: remove demo
       
    57 			writer->startRelation(L"xml_startElement",{
       
    58 				{L"s", TypeId::STRING},
       
    59 			}, true);
       
    60 
       
    61 			writer->writeAttribute(L"a");
       
    62 		}
       
    63 
       
    64 		void endElement(const XMLCh * const uri, const XMLCh * const localname, const XMLCh * const qname) override {
       
    65 			// TODO: remove demo
       
    66 			writer->startRelation(L"xml_endElement",{
       
    67 				{L"s", TypeId::STRING},
       
    68 			}, true);
       
    69 
       
    70 			writer->writeAttribute(L"a");
       
    71 		}
       
    72 
       
    73 		void endDocument() override {
       
    74 			// TODO: remove demo
       
    75 			writer->startRelation(L"xml_endDocument",{
       
    76 				{L"s", TypeId::STRING},
       
    77 			}, true);
       
    78 
       
    79 			writer->writeAttribute(L"a");
       
    80 		}
       
    81 
       
    82 	};
       
    83 
    40 public:
    84 public:
    41 
    85 
    42 	void process(std::istream& input, std::ostream& output) {
    86 	void process(std::istream& input, std::ostream& output) {
    43 		using namespace relpipe::writer;
       
    44 		using namespace xercesc;
       
    45 		unique_ptr<RelationalWriter> writer(Factory::create(output));
       
    46 		XMLPlatformUtils::Initialize();
    87 		XMLPlatformUtils::Initialize();
    47 
       
    48 
       
    49 		unique_ptr<SAX2XMLReader> parser(XMLReaderFactory::createXMLReader());
    88 		unique_ptr<SAX2XMLReader> parser(XMLReaderFactory::createXMLReader());
    50 		parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
    89 		parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
    51 		parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
    90 		parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
    52 
    91 
    53 		// TODO: custom handler that reads
    92 		RelpipeSaxHandler saxHandler(output);
    54 		DefaultHandler defaultHandler;
    93 		parser->setContentHandler(&saxHandler);
    55 		parser->setContentHandler(&defaultHandler);
    94 		parser->setErrorHandler(&saxHandler);
    56 		parser->setErrorHandler(&defaultHandler);
       
    57 
    95 
    58 		StreamInputSource inputSource(input);
    96 		StreamInputSource inputSource(input);
    59 
    97 
    60 		parser->parse(inputSource);
    98 		parser->parse(inputSource);
    61 
       
    62 
       
    63 		// TODO: remove demo
       
    64 		// Various data types passed as strings
       
    65 		writer->startRelation(L"xml",{
       
    66 			{L"s", TypeId::STRING},
       
    67 			{L"i", TypeId::INTEGER},
       
    68 			{L"b", TypeId::BOOLEAN}
       
    69 		}, true);
       
    70 
       
    71 		writer->writeAttribute(L"a");
       
    72 		writer->writeAttribute(L"1");
       
    73 		writer->writeAttribute(L"true");
       
    74 
       
    75 	}
    99 	}
    76 };
   100 };
    77 
   101 
    78 }
   102 }
    79 }
   103 }