SOL9 2.0 Class: XMLDOMDocument

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

Source code

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


// SOL9
// 2011/01/27
// 2011/02/06 Added    XMLDOMDocument(const GUID clsId)

#pragma once

#include <sol/xml/XMLDOMAttribute.h>

#include <sol/xml/XMLDOMAttributes.h>
#include <sol/xml/XMLDOMCDATASection.h>
#include <sol/xml/XMLDOMCharacterData.h>
#include <sol/xml/XMLDOMComment.h>
#include <sol/xml/XMLDOMDocumentFragment.h>
#include <sol/xml/XMLDOMDocumentType.h>
#include <sol/xml/XMLDOMElement.h>
#include <sol/xml/XMLDOMEntity.h>
#include <sol/xml/XMLDOMEntityReference.h>
#include <sol/xml/XMLDOMImplementation.h>
#include <sol/xml/XMLDOMNamedNodeMap.h>
#include <sol/xml/XMLDOMNode.h>
#include <sol/xml/XMLDOMNodeList.h>
#include <sol/xml/XMLDOMNotation.h>
#include <sol/xml/XMLDOMParseError.h>
#include <sol/xml/XMLDOMProcessingInstruction.h>
#include <sol/xml/XMLDOMSchemaCollection.h>
#include <sol/xml/XMLDOMText.h>

// 2011/02/10 Modified to use GUID __uuidof(MSXML2::DOMDocument60) in XMLDOMDocument() constructor
//If you would like to create an instance to the previous __uuidof(MSXML2::DOMDocument30),
// please uset the constructor in the following way.
// XMLDOMDocument xmlDocument(__uuidof(MSXML2::DOMDocument30));
// 2011/02/10 Modified the load(xmlString) methods to be loadXML(xmlString)

namespace SOL {

class XMLDOMDocument : public XMLDOMNode {

public:
    /**
     * Constructor
     */
    XMLDOMDocument(const GUID clsId60 = __uuidof(MSXML2::DOMDocument60),
                   const GUID clsId40 = __uuidof(MSXML2::DOMDocument40),
                   const GUID clsId30 = __uuidof(MSXML2::DOMDocument30))
    :XMLDOMNode(NULL)
    {
        MSXML2::IXMLDOMDocument2Ptr pDocument;

        HRESULT hr = pDocument.CreateInstance(clsId60);

        if(FAILED(hr)) {
            hr = hr = pDocument.CreateInstance(clsId40);
            if (FAILED(hr)) {
                hr = pDocument.CreateInstance(clsId30);
                if (FAILED(hr)) {
                    throw Exception("Failed to create an instance of XMLDOMDocument\n", hr);
                }
            }
        }

        hr = pDocument->setProperty(_bstr_t("SelectionLanguage"), variant_t(L"XPath"));
        if(FAILED(hr)) {
            pDocument = NULL;
            throw Exception("Failed to setProperty for SelectionLanguage\n", hr);
        }

        set((MSXML2::IXMLDOMNodePtr)pDocument);
    }


public:
    /**
     * Destructor
     */
    ~XMLDOMDocument()
    {
        //
    }


public:
    virtual MSXML2::IXMLDOMDocument2Ptr getDocumentPtr()
    {
        return(MSXML2::IXMLDOMDocument2Ptr)XMLDOMNode::getNodePtr();
    }

public:
    //2011/02/07
    operator MSXML2::IXMLDOMDocument*()
    {
        return (MSXML2::IXMLDOMDocument*)getDocumentPtr();
    }


public:
    bool setProperty(__in _bstr_t& name, __in _variant_t& value)
    {
        bool rc = false;
        HRESULT    hr = getDocumentPtr()->setProperty(name, value);
        if (FAILED(hr)) {
            throw hr;
        } else {
            rc = true;
        }
        return rc;
    }

public:
    /**
     * Load a text string of a parameter xml and build a XMLDOMDocument object.
     *
     * @param xml    _bstr_t& text string to an XML.
     * @return bool Success or Error
     */
    //bool load(__in const _bstr_t& xml)
    bool loadXML(__in const _bstr_t& xml)
    {    
        bool rc = true;
    
        putAsync(VARIANT_FALSE); // default - true,

        VARIANT_BOOL hr = getDocumentPtr() ->loadXML(xml);
        if (hr != VARIANT_TRUE) {
            throw XMLDOMParseError(getParseError());
        }
        return rc;
    }


public:
    /**
     * Open xml file specified by parameter
     * @filePath  xml file path.
     */
    bool open(__in const TCHAR* filePath) 
    {
        bool rc = true;

        putAsync(VARIANT_FALSE); 
        VARIANT_BOOL hr = getDocumentPtr()->load(_bstr_t(filePath));
    
        if (hr != VARIANT_TRUE){
            throw XMLDOMParseError(getParseError());
        }
        return rc;
    }

public:
    /**
     * Save an xml text of IXMLDOMDocument of xmlDoc to the file of fileName.
     */
    bool save(__in const TCHAR* fileName) 
    {
        bool rc = true;
        if (fileName) {
            _bstr_t bfileName = fileName;
            HRESULT hr = getDocumentPtr()->save(bfileName);
            if (FAILED(hr)) {
                throw hr;
            }
        }
        return rc;
    }

//<IXMDOMDocument>

public:
    MSXML2::IXMLDOMDocumentTypePtr getDoctype()
    {
        return getDocumentPtr()-> Getdoctype();
    }


    MSXML2::IXMLDOMImplementationPtr getImplementation()
    {
        return getDocumentPtr()-> Getimplementation();
    }


    MSXML2::IXMLDOMElementPtr getDocumentElement()
    {
        return getDocumentPtr()-> GetdocumentElement();
    }


    void putRefdocumentElement(struct MSXML2::IXMLDOMElement * DOMElement)
    {
        getDocumentPtr()-> PutRefdocumentElement(DOMElement);
    }


    MSXML2::IXMLDOMElementPtr createElement(_bstr_t tagName)
    {
        return getDocumentPtr()-> createElement(tagName);
    }

    MSXML2::IXMLDOMDocumentFragmentPtr createDocumentFragment()
    {
        return getDocumentPtr()-> createDocumentFragment();
    }

    MSXML2::IXMLDOMTextPtr createTextNode(_bstr_t data)
    {
        return getDocumentPtr()-> createTextNode(data);
    }

    MSXML2::IXMLDOMCommentPtr createComment(_bstr_t data)
    {
        return getDocumentPtr()-> createComment(data);
    }

    MSXML2::IXMLDOMCDATASectionPtr createCDATASection(_bstr_t data)
    {
        return getDocumentPtr()-> createCDATASection(data);
    }

    MSXML2::IXMLDOMProcessingInstructionPtr createProcessingInstruction(_bstr_t target, _bstr_t data)
    {
        return getDocumentPtr()-> createProcessingInstruction(target, data);
    }

    MSXML2::IXMLDOMAttributePtr createAttribute(_bstr_t name)
    {
        return getDocumentPtr()-> createAttribute(name);
    }

    MSXML2::IXMLDOMEntityReferencePtr createEntityReference(_bstr_t name)
    {
        return getDocumentPtr()-> createEntityReference(name);
    }

    MSXML2::IXMLDOMNodeListPtr getElementsByTagName(_bstr_t tagName)
    {
        return getDocumentPtr()-> getElementsByTagName( tagName);
    }

    MSXML2::IXMLDOMNodePtr createNode(const _variant_t & type, _bstr_t name, _bstr_t namespaceURI)
    {
        return getDocumentPtr()-> createNode(type, name, namespaceURI);
    }

    MSXML2::IXMLDOMNodePtr nodeFromID(_bstr_t idString)
    {
        return getDocumentPtr()-> nodeFromID(idString);
    }

    VARIANT_BOOL load(const _variant_t & xmlSource)
    {
        return getDocumentPtr()-> load(xmlSource);
    }

    long getReadyState()
    {
        return getDocumentPtr()-> GetreadyState();
    }

    MSXML2::IXMLDOMParseErrorPtr getParseError()
    {
        return getDocumentPtr()-> GetparseError();
    }

    _bstr_t getUrl()
    {
        return getDocumentPtr()-> Geturl();
    }

    VARIANT_BOOL getAsync()
    {
        return getDocumentPtr()-> Getasync();
    }

    void putAsync(VARIANT_BOOL isAsync)
    {
        return getDocumentPtr()-> Putasync(isAsync);
    }

    HRESULT abort()
    {
        return getDocumentPtr()-> abort();
    }

    HRESULT save(const _variant_t & destination)
    {
        return getDocumentPtr()-> save(destination);
    }

    VARIANT_BOOL getValidateOnParse()
    {
        return getDocumentPtr()-> GetvalidateOnParse();
    }

    void putValidateOnParse(
        VARIANT_BOOL isValidating)
    {
        getDocumentPtr()-> PutvalidateOnParse(isValidating);
    }

    VARIANT_BOOL getResolveExternals()
    {
        return getDocumentPtr()-> GetresolveExternals();
    }

    void putResolveExternals(VARIANT_BOOL isResolving)
    {
        getDocumentPtr()-> PutresolveExternals(isResolving);
    }

    VARIANT_BOOL getPreserveWhiteSpace()
    {
        return getDocumentPtr()-> GetpreserveWhiteSpace();
    }

    void putPreserveWhiteSpace(VARIANT_BOOL isPreserving)
    {
        getDocumentPtr()-> PutpreserveWhiteSpace(isPreserving);
    }

    void putOnReadyStateChange(const _variant_t & _arg1)
    {
        getDocumentPtr()-> Putonreadystatechange(_arg1);
    }

    void putOnDataAvailable(const _variant_t & _arg1)
    {
        getDocumentPtr()-> Putondataavailable(_arg1);
    }
    
    void putOnTransformNode(const _variant_t & _arg1)
    {
        getDocumentPtr()-> Putontransformnode(_arg1);
    }
//</IXMDOMDocument>

//<IXMDOMDocument2>
public:
    MSXML2::IXMLDOMSchemaCollectionPtr getNamespaces()
    {
        return getDocumentPtr() -> Getnamespaces();
    }

    _variant_t getSchemas()
    {
        return getDocumentPtr() -> Getschemas();
    }

    void  putRefschemas(const _variant_t & otherCollection)
    {
        getDocumentPtr() -> PutRefschemas(otherCollection);
    }


    MSXML2::IXMLDOMParseErrorPtr validate()
    {
        return getDocumentPtr() -> validate();
    }


    HRESULT setProperty(_bstr_t name, const _variant_t & value)
    {
        return getDocumentPtr() -> setProperty(name, value);
    }

    _variant_t getProperty(_bstr_t name)
    {
        return getDocumentPtr() -> getProperty(name);
    }
//</IXMDOMDocument2>


//<IXMDOMDocument3>
public:
/*
    MSXML2::IXMLDOMParseErrorPtr validateNode(struct MSXML2::IXMLDOMNode * node)
    {
        return getDocumentPtr()-> validateNode(node);
    }

    
    MSXML2::IXMLDOMNodePtr importNode(struct MSXML2::IXMLDOMNode * node, VARIANT_BOOL deep)
    {
        return getDocumentPtr()-> importNode(node, deep);
    }
*/
//</IXMDOMDocument3>
};

}

Last modified: 1 Feb 2012

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