« お気軽にXMLを扱ってみる 其の3 | トップページ | お気軽にXMLを扱ってみる 其の5 »

2010年8月18日 (水)

お気軽にXMLを扱ってみる 其の4

ずいぶん、時間が経ってしまいましたが、お気軽にXMLを扱ってみたいと思います。

前回、属性のクラスを設計したので、今回は、要素のクラスを設計します。

要素は、名前と、要素、属性を保持することができます。名前は問題ないとして、要素と属性は、リストかなんかで管理しますか。

とりあえず、要素と属性のリストに関しては、生成、削除、参照の機能を用意します。

では、それらを踏まえて、ソースです。

class element {
public:
    /* 名前の取得 */
    std::string getName( void ) const {
        return m_Name;
    }
    /* 名前の設定 */
    void setName( std::string name ) {
        m_Name = name;
    }
    /* 要素生成 */
    element* createElement( void ) {
        element* e = new element;
        m_ElementList.push_back( e );
        return e;
    }
    /* 要素削除 */
    void deleteElement( element* e ) {
        std::list<element*>::iterator it =
            find( m_ElementList.begin(), m_ElementList.end(), e );
        if( it != m_ElementList.end() ) {
            delete *it;
            m_ElementList.erase( it );
        }
    }
    /* 要素参照 */
    std::list<element*>::iterator getElementBegin( void ) {
        return m_ElementList.begin();
    }
    std::list<element*>::iterator getElementEnd( void ) {
        return m_ElementList.end();
    }
    /* 属性生成 */
    attribute* createAttribute( void ) {
        attribute* a = new attribute;
        m_AttributeList.push_back( a );
        return a;
    }
    /* 属性削除 */
    void deleteAttribute( attribute* a ) {
        std::list<attribute*>::iterator it =
            find( m_AttributeList.begin(), m_AttributeList.end(), a );
        if( it != m_AttributeList.end() ) {
            delete *it;
            m_AttributeList.erase( it );
        }
    }
    /* 属性参照 */
    std::list<attribute*>::iterator getAttributeBegin( void ) {
        return m_AttributeList.begin();
    }
    std::list<attribute*>::iterator getAttributeEnd( void ) {
        return m_AttributeList.end();
    }
public:
    /* コンストラクタ */
    element() {;}
    /* デストラクタ */
    virtual ~element() {
        /* 属性の削除 */
        for( std::list<attribute*>::iterator it = m_AttributeList.begin();
             it != m_AttributeList.end(); it++ )
        {
            delete *it;
        }
        m_AttributeList.clear();
        /* 要素の削除 */
        for( std::list<element*>::iterator it = m_ElementList.begin();
             it != m_ElementList.end(); it++ )
        {
            delete *it;
        }
        m_ElementList.clear();
    }
protected:
    element( const element& );
    const element& operator=( const element& );
protected:
    /* 名前 */
    std::string m_Name;
    /* 要素リスト */
    std::list<element*> m_ElementList;
    /* 属性リスト */
    std::list<attribute*> m_AttributeList;
};

あんまり、解説するところはないですね。一応、参照につきましては、リストのイテレータを取得できるようにしました。

XMLを保持するための入れ物が完成しましたので、つぎは、XMLの読み取りを行っていきたいと思います。

|

« お気軽にXMLを扱ってみる 其の3 | トップページ | お気軽にXMLを扱ってみる 其の5 »

C++」カテゴリの記事

XML」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: お気軽にXMLを扱ってみる 其の4:

« お気軽にXMLを扱ってみる 其の3 | トップページ | お気軽にXMLを扱ってみる 其の5 »