| Oracle8i Application Developer's Guide - XML Release 3 (8.1.7) Part Number A86030-01 |
|
Using XML C++ Class Generator, 6 of 6
Table 23-2 lists the files in the sample XML C++ Class Generator sample/ directory.
The make.bat batch file (on Windows NT) or Makefile (on UNIX) do the following:
This XML file, CG.xml, inputs XML C++ Class Generator. It references the DTD file, CG.dtd.
<?xml version="1.0"?> <!DOCTYPE Sample SYSTEM "CG.dtd"> <Sample> <B>Be!</B> <D attr="value"></D> <E> <F>Formula1</F> <F>Formula2</F> </E> </Sample>
This DTD file, CG.dtd is referenced by the XML file CG.xml. CG.xml inputs XML C++ Class Generator.
<!ELEMENT Sample (A | (B, (C | (D, E))) | F)> <!ELEMENT A (#PCDATA)> <!ELEMENT B (#PCDATA | F)*> <!ELEMENT C (#PCDATA)> <!ELEMENT D (#PCDATA)> <!ATTLIST D attr CDATA #REQUIRED> <!ELEMENT E (F, F)> <!ELEMENT F (#PCDATA)>
The CG sample program, CG.cpp, does the following:
////////////////////////////////////////////////////////////////////////////// // NAME CG.cpp // DESCRIPTION Demonstration program for C++ Class Generator usage ////////////////////////////////////////////////////////////////////////////// #ifndef ORAXMLDOM_ORACLE # include <oraxmldom.h> #endif #include <fstream.h> #include "Sample.h" #define DTD_DOCUMENT "CG.xml" #define OUT_DOCUMENT "Sample.xml" int main() { XMLParser parser; Document *doc; Sample *samp; B *b; D *d; E *e; F *f1, *f2; fstream *out; ub4 flags = XML_FLAG_VALIDATE; uword ecode; // Initialize XML parser cout << "Initializing XML parser...\n"; if (ecode = parser.xmlinit()) { cout << "Failed to initialize parser, code " << ecode << "\n"; return 1; } // Parse the document containing a DTD; parsing just a DTD is not // possible yet, so the file must contain a valid document (which // is parsed but we're ignoring). cout << "Loading DTD from " << DTD_DOCUMENT << "...\n"; if (ecode = parser.xmlparse((oratext *) DTD_DOCUMENT, (oratext *)0, flags)) { cout << "Failed to parse DTD document " << DTD_DOCUMENT << ", code " << ecode << "\n"; return 2; } // Fetch dummy document cout << "Fetching dummy document...\n"; doc = parser.getDocument(); // Create the constituent parts of a Sample cout << "Creating components...\n"; b = new B(doc, (String) "Be there or be square"); d = new D(doc, (String) "Dit dah"); d->setattr((String) "attribute value"); f1 = new F(doc, (String) "Formula1"); f2 = new F(doc, (String) "Formula2"); e = new E(doc, f1, f2); // Create the Sample cout << "Creating top-level element...\n"; samp = new Sample(doc, b, d, e); // Validate the construct cout << "Validating...\n"; if (ecode = parser.validate(samp)) { cout << "Validation failed, code " << ecode << "\n"; return 3; } // Write out doc cout << "Writing document to " << OUT_DOCUMENT << "\n"; if (!(out = new fstream(OUT_DOCUMENT, ios::out))) { cout << "Failed to open output stream\n"; return 4; } samp->print(out, 0); out->close(); // Everything's OK cout << "Success.\n"; // Shut down parser.xmlterm(); return 0; } // end of CG.cpp
|
|
![]() Copyright © 1996-2000, Oracle Corporation. All Rights Reserved. |
|