SOL9 2.0 Class: SAXSchemaReader

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * SAXSchemaReader.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL9
// 2011/01/27
#pragma once
#include <sol/xml/SAXXMLReader.h>
#include <sol/xml/SAXAttributes.h>

namespace SOL {

// Read xsd file an extrace the data of 'schema' element.
class SAXSchemaReader :public SAXXMLReader {

private:
    //<InternalClass> ---------------------------------------------
    //Derive your own Contenthandler class from SAXContentHandlerImpl.
    class SAXSchemaContentHandler: public SAXContentHandlerImpl {

    public:
        //<xsd:schema> attribute values
        _bstr_t values[9];
        
    public:
        static enum {
            targetNamespace,
            version,
            xmlns,
            finalDefault,
            blockDefault,
            id,
            elementFormDefault,
            attributeFormDefault,
            xml_lang
        } ATTRIBUTES;

    public:
        SAXSchemaContentHandler()
        {
        }

    public:
        virtual void startElement(
            __in const _bstr_t uri,
            __in const _bstr_t localName,
            __in const _bstr_t qName,
            __in struct MSXML2::ISAXAttributes * pAttributes)
        {
            static const char* names[] ={
            "targetNamespace",
            "version",
            "xmlns",
            "finalDefault",
            "blockDefault",
            "id",    
            "elementFormDefault",
            "attributeFormDefault",
            "xml:lang"};

            if (localName == _bstr_t("schema")) {
                _tprintf(_T("SAXSchemaReader::SAXSchemaContentHandlerstartElement() uri=%s localName=%s qName=%s\n"),
                    (const TCHAR*) uri,
                    (const TCHAR*)localName,
                    (const TCHAR*)qName);
                
                SAXAttributes attributes = pAttributes;
                for (int i = 0; i<SizeOf(names); i++) {
                    _bstr_t value = "";
                    values[i] = "";
                    try {
                        attributes.getValueFromQName(names[i], value);
                        values[i] = value;
                    } catch (...) {
                    }
                }
            }
        }
    };
/*
<!ATTLIST %schema;
   targetNamespace      %URIref;               #IMPLIED
   version              CDATA                  #IMPLIED
   %nds;                %URIref;               #FIXED 'http://www.w3.org/2001/XMLSchema'
   xmlns                CDATA                  #IMPLIED
   finalDefault         %complexDerivationSet; ''
   blockDefault         %blockSet;             ''
   id                   ID                     #IMPLIED
   elementFormDefault   %formValues;           'unqualified'
   attributeFormDefault %formValues;           'unqualified'
   xml:lang             CDATA                  #IMPLIED
   %schemaAttrs;>
*/
    //</InternalClass> --------------------------------------------
            
private:
    SAXSchemaContentHandler schemaContentHandler;

public:
    /**
     */
    SAXSchemaReader()
    {
        putContentHandler(&schemaContentHandler);
    }


public:
    bool read(_bstr_t xsdFile)
    {
        bool rc = true;
        HRESULT hr = parseURL(xsdFile);
        if (FAILED(hr)) {
            throw hr;
        }
        return rc;
    }

public:
    _bstr_t& getTargetNamespace()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::targetNamespace];
    }

public:
    _bstr_t& getVersion()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::version];
    }

public:
    _bstr_t& getXmlns()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::xmlns];
    }

public:
    _bstr_t& getFinalDefault()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::finalDefault];
    }

public:
    _bstr_t& getBlockDefault()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::blockDefault];
    }
public:
    _bstr_t& getId()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::id];
    }

public:
    _bstr_t& getElementFormDefault()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::elementFormDefault];
    }
public:
    _bstr_t& getAttributeFormDefault()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::attributeFormDefault];
    }

public:
    _bstr_t& getXmlLang()
    {
        return  schemaContentHandler.values[SAXSchemaContentHandler::xml_lang];
    }

public:
    void display()
    {
        _tprintf(_T("<SAXSchemaReader>\n"));

        _tprintf(_T(
        "<schema TargetNamespace=\"%s\" version=\"%s\" xmlns=\"%s\"  finalDefault=\"%s\" blockDefault=\"%s\" id=\"%s\" elementFormDefault=\"%s\" attributeFormDefault=\"%s\" xml:lang=\"%s\" />\n"),
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::targetNamespace],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::xmlns],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::version],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::xmlns],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::finalDefault],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::blockDefault],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::id],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::elementFormDefault],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::attributeFormDefault],
            (const TCHAR*)schemaContentHandler.values[SAXSchemaContentHandler::xml_lang]);
        _tprintf(_T("</SAXSchemaReader>\n"));
    }

};

}



Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.