/* * main.cxx * * PWLib application source file for PxmlTest * * Main program entry point. * * Copyright 2002 David Iodice. * * $Log: main.cxx,v $ * Revision 1.2 2005/11/30 12:47:40 csoutheren * Removed tabs, reformatted some code, and changed tags for Doxygen * * Revision 1.1 2002/03/07 01:56:56 robertj * Added XML sample/test program. * */ #include #include "main.h" PCREATE_PROCESS(PxmlTest); PxmlTest::PxmlTest() : PProcess("XML Testing Guru", "PxmlTest", 1, 0, AlphaCode, 1) { } static const PString XML_ID(""); static const PString LEThdr(""); static const PString LETtrl(""); static const PString SetNumHdr(""); static const PString SetNumTrl(""); void printElement(int i,PXMLObject * el) { if (el->IsElement()) { cout << "("<GetName() << endl; if (((const PXMLElement *)el)->HasAttributes()) { for (PINDEX j=0; j< ((const PXMLElement *)el)->GetNumAttributes(); ++j) { cout << " " << ((const PXMLElement *)el)->GetKeyAttribute(j) << "=" << ((const PXMLElement *)el)->GetDataAttribute(j); } } cout << " " << ((const PXMLElement *)el)->GetData() << endl; if (((const PXMLElement *)el)->HasSubObjects()) { PXMLObjectArray obs = ((const PXMLElement *)el)->GetSubObjects(); for (PINDEX o=0;o5"); PString COLORT1(""); PString COLORT2(""); PString COLORT3(""); PString ns(PString::Signed,num); PAssert((COLORT1 == PXML::CreateStartTag(t)),"PXML::CreateStartTag(t) failed"); PAssert((COLORT2 == PXML::CreateEndTag(t)),"PXML::CreateEndTag(t) failed"); PAssert((COLORT3 == PXML::CreateTagNoData(t)),"PXML::CreateTagNoData(t) failed"); PAssert((COLORVAL == PXML::CreateTag(t,ns)),"PXML::CreateTag(t,ns) failed"); PString ch = LEThdr + SetNumHdr + "23" + SetNumTrl + LETtrl; PXML xml(ch,PXML::Indent |PXML::NewLineAfterElement+PXML::NoIgnoreWhiteSpace); PStringStream s; s << xml; //can we recreate the XML? PXML revamp; PString ROOTELE("s:Envelope"); PString ROOTATKEY1("xmlns:s"); PString ROOTATDAT1("http://schemas.letter.org/letter/envelope/"); PString ROOTATKEY2("s:encodingStyle"); PString ROOTATDAT2("http://schemas.letter.org/letter/encoding/"); PAssert((ROOTELE == xml.GetRootElement()->GetName()),"Root element name not as expected"); if (xml.GetRootElement()->HasAttributes()) { for (PINDEX a=0; aGetNumAttributes(); ++a) { PAssert((ROOTATKEY1 == xml.GetRootElement()->GetKeyAttribute(a) || ROOTATKEY2 == xml.GetRootElement()->GetKeyAttribute(a)),"Root element attribute key not as expected"); PAssert((ROOTATDAT1 == xml.GetRootElement()->GetDataAttribute(a) || ROOTATDAT2 == xml.GetRootElement()->GetDataAttribute(a)),"Root element attribute data not as expected"); } } PAssert((PString() == xml.GetRootElement()->GetData()),"Root element data not as expected"); #if 0 //=== // An example of printing elements -- see the function defined above //=== for (PINDEX i=0; iPrintOn(rs, -1, 0); cout << rs << endl; revamp.Load(rs);; cout << "Revamped XML" << revamp << endl; #endif //=== // Extract a subset of the XML // This can be used when the "data" of an XML element // is XML and you don't need that parsed yet :-) //=== PStringStream ss; xml.GetElement(0)->PrintOn(ss, -1, 0); PString EXCERPT("" + SetNumHdr + "23" + SetNumTrl + ""); PAssert((EXCERPT == ss),"XML subset data not as expected"); PXMLElement el(NULL, t); PXMLData * d = new PXMLData(NULL,ns); el.AddSubObject(d); PAssert((PString("Color") == el.GetName()),"Element name not as expected"); PAssert((PString("5") == el.GetData()),"Element data not as expected"); #if 0 //=== // Checkout these examples of the PXMLSettings class // // Constructor with data and options //=== PXMLSettings dgi(ch,PXML::Indent | PXML::NewLineAfterElement | PXML::NoIgnoreWhiteSpace); cout << "PXMLSettings: " << dgi << endl; // Default Constructor PXMLSettings opts; PString optsect("Options"); PString comType("Comm Type"); PString val("FTP"); opts.SetAttribute(optsect,comType,val); cout << "attributes==>" << opts.GetAttribute(optsect,comType) << "<==" << endl; cout << "PXMLSettings: " << opts; cout << "done" << endl; #endif // Constructor with PConfig and String PFilePath fp("cfg.txt"); PConfig cfg(fp, "Options"); PXMLSettings xmlcfg(cfg); PStringStream xc; xc << xmlcfg; PFilePath fp2("cfgOut.txt"); PConfig * cfg2; cfg2 = new PConfig(fp2, "Root"); xmlcfg.ToConfig(*cfg2); delete cfg2; PTextFile tfp(fp2); PString fxc; char xcc; while(tfp.Read((void *)&xcc,1)) fxc += xcc; PXMLSettings xmlcfg2(cfg); PStringStream xc2; xc2 << xmlcfg2; PAssert((xc2 == xc),"Config not as expected"); cout << "*** Test Passed ***" << endl; } // End of File ///////////////////////////////////////////////////////////////