• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Codejie's C++ Space

            Using C++

            記錄:wxXmlNode的使用


            ??? 這兩天在個朋友Yao寫一個很簡單而繁瑣的程序--學生排座程序。說簡單,是需求很簡單,就是隨機排座;說繁瑣是在很多細節和GUI實現上累的我半死。想想,我還是喜歡寫console程序。。。
            ??? 程序中的文件存儲操作采用的是xml格式,以前我都使用TinyXML,一個很小,很好用的XML庫。由于這次程序使用的是wxWidgets,因此XML部分也就使用wxWidgets提供的wxXmlDocument/wxXmlNode/wxXmlProperty了。這幾個對象的名字在TinyXML中都有相對應的對象,上手也快,但細節上有些不同,尤其是wxXmlNodeType這個類型的使用上。

            enum?wxXmlNodeType
            {
            ????
            //?note:?values?are?synchronized?with?xmlElementType?from?libxml
            ????wxXML_ELEMENT_NODE???????=??1,
            ????wxXML_ATTRIBUTE_NODE?????
            =??2,
            ????wxXML_TEXT_NODE??????????
            =??3,
            ????wxXML_CDATA_SECTION_NODE?
            =??4,
            ????wxXML_ENTITY_REF_NODE????
            =??5,
            ????wxXML_ENTITY_NODE????????
            =??6,
            ????wxXML_PI_NODE????????????
            =??7,
            ????wxXML_COMMENT_NODE???????
            =??8,
            ????wxXML_DOCUMENT_NODE??????
            =??9,
            ????wxXML_DOCUMENT_TYPE_NODE?
            =?10,
            ????wxXML_DOCUMENT_FRAG_NODE?
            =?11,
            ????wxXML_NOTATION_NODE??????
            =?12,
            ????wxXML_HTML_DOCUMENT_NODE?
            =?13
            }
            ;


            ??? 下面是使用wxWidgets中XML對象的open/save操作代碼,記錄下。
            ??1int?CManageObject::Open(const?wxString?&file)
            ??2{
            ??3????wxXmlDocument?doc;
            ??4????if(!doc.Load(file))
            ??5????????return?-1;
            ??6????
            ??7????wxXmlNode*?root?=?doc.GetRoot();
            ??8????if(root?==?NULL)
            ??9????????return?-1;
            ?10????wxString?str?=?root->GetName();
            ?11????if(str?!=?wxT("RunSite"))
            ?12????????return?-1;
            ?13
            ?14????New();
            ?15
            ?16????wxXmlNode*?si?=?root->GetChildren();
            ?17????if(si?==?NULL)
            ?18????????return?-1;
            ?19????str?=?si->GetName();
            ?20????if(str?!=?wxT("SiteInfo"))
            ?21????????return?-1;
            ?22????wxXmlNode*?col?=?si->GetChildren();
            ?23????if(col?==?NULL)
            ?24????????return?-1;
            ?25????str?=?col->GetName();
            ?26????if(str?!=?wxT("Col"))
            ?27????????return?-1;
            ?28????str?=?col->GetNodeContent();
            ?29????if(!str.ToLong(&m_data.col))
            ?30????????return?-1;
            ?31????wxXmlNode*?row?=?col->GetNext();
            ?32????if(row?==?NULL)
            ?33????????return?-1;
            ?34????str?=?row->GetName();
            ?35????if(str?!=?wxT("Row"))
            ?36????????return?-1;
            ?37????str?=?row->GetNodeContent();
            ?38????if(!str.ToLong(&m_data.row))
            ?39????????return?-1;
            ?40
            ?41????wxXmlNode*?special?=?row->GetNext();
            ?42????if(special?!=?NULL)
            ?43????{
            ?44????????m_data.sitespecial?=?true;
            ?45????????if(special->GetName()?!=?wxT("Special"))
            ?46????????????return?-1;
            ?47????????wxXmlNode*?s?=?special->GetChildren();
            ?48????????if(s?==?NULL?||?s->GetName()?!=?wxT("ColRange"))
            ?49????????????return?-1;
            ?50????????wxXmlProperty*?p?=?s->GetProperties();
            ?51????????if(p?==?NULL?||?p->GetName()?!=?wxT("begin"))
            ?52????????????return?-1;
            ?53????????if(!p->GetValue().ToLong(&m_data.bcol))
            ?54????????????return?-1;
            ?55????????p?=?p->GetNext();
            ?56????????if(p?==?NULL?||?p->GetName()?!=?wxT("end"))
            ?57????????????return?-1;
            ?58????????if(!p->GetValue().ToLong(&m_data.ecol))
            ?59????????????return?-1;
            ?60
            ?61????????s?=?s->GetNext();
            ?62????????if(s?==?NULL?||?s->GetName()?!=?wxT("RowRange"))
            ?63????????????return?-1;
            ?64????????p?=?s->GetProperties();
            ?65????????if(p?==?NULL?||?p->GetName()?!=?wxT("begin"))
            ?66????????????return?-1;
            ?67????????if(!p->GetValue().ToLong(&m_data.brow))
            ?68????????????return?-1;
            ?69????????p?=?p->GetNext();
            ?70????????if(p?==?NULL?||?p->GetName()?!=?wxT("end"))
            ?71????????????return?-1;
            ?72????????if(!p->GetValue().ToLong(&m_data.erow))
            ?73????????????return?-1;
            ?74????}

            ?75????else
            ?76????{
            ?77????????m_data.sitespecial?=?false;
            ?78????}

            ?79
            ?80????wxXmlNode*?bi?=?si->GetNext();
            ?81????if(bi?==?NULL?||?bi->GetName()?!=?wxT("BoxInfo"))
            ?82????????return?-1;
            ?83????wxXmlNode*?b?=?bi->GetChildren();
            ?84????while(b?!=?NULL)
            ?85????{
            ?86????????if(b->GetName()?!=?wxT("Box"))
            ?87????????????return?-1;
            ?88????????Data::box_t?box;
            ?89????????wxXmlProperty*?p?=?b->GetProperties();
            ?90????????if(p?==?NULL?||?p->GetName()?!=?wxT("id"))
            ?91????????????return?-1;
            ?92????????box.id?=?p->GetValue();
            ?93
            ?94????????p?=?p->GetNext();
            ?95????????if(p?==?NULL?||?p->GetName()?!=?wxT("name"))
            ?96????????????return?-1;
            ?97????????box.name?=?p->GetValue();
            ?98
            ?99????????p?=?p->GetNext();
            100????????if(p?!=?NULL)
            101????????{
            102????????????if(p->GetName()?!=?wxT("special"))
            103????????????????return?-1;
            104????????????if(p->GetValue()?==?wxT("T"))
            105????????????????box.special?=?true;
            106????????????else
            107????????????????box.special?=?false;
            108????????}

            109????????else
            110????????{
            111????????????box.special?=?false;
            112????????}

            113
            114????????m_data.vct.push_back(box);
            115
            116????????b?=?b->GetNext();
            117????}

            118
            119????return?0;
            120}

            121
            122int?CManageObject::Save(const?wxString?&file)
            123{
            124????wxXmlNode*?cx?=?NULL;
            125????wxXmlNode*?root?=?new?wxXmlNode(NULL,?wxXML_ELEMENT_NODE,?wxT("RunSite"));????
            126
            127//SiteInfo
            128????wxXmlNode*?si?=?new?wxXmlNode(NULL,?wxXML_ELEMENT_NODE,?wxT("SiteInfo"),?wxEmptyString);
            129
            130????wxXmlNode*?col?=?new?wxXmlNode(wxXML_ELEMENT_NODE,?wxT("Col"));
            131????cx?=?new?wxXmlNode(wxXML_TEXT_NODE,?wxEmptyString,?wxString::Format(wxT("%d"),?m_data.col));
            132????col->AddChild(cx);
            133????si->AddChild(col);
            134????wxXmlNode*?row?=?new?wxXmlNode(wxXML_ELEMENT_NODE,?wxT("Row"));
            135????cx?=?new?wxXmlNode(wxXML_TEXT_NODE,?wxEmptyString,?wxString::Format(wxT("%d"),?m_data.row));
            136????row->AddChild(cx);
            137????si->AddChild(row);
            138
            139????wxXmlNode*?sp?=?NULL;
            140
            141????if(m_data.sitespecial)
            142????{
            143????????wxXmlNode*?sp?=?new?wxXmlNode(NULL,?wxXML_ELEMENT_NODE,?wxT("Special"));
            144
            145????????wxXmlProperty*?e?=?new?wxXmlProperty(wxT("end"),?wxString::Format(wxT("%d"),?m_data.ecol));
            146????????wxXmlProperty*?b?=?new?wxXmlProperty(wxT("begin"),?wxString::Format(wxT("%d"),?m_data.bcol),?e);
            147????????wxXmlNode*?c?=?new?wxXmlNode(NULL,?wxXML_ELEMENT_NODE,?wxT("ColRange"),?wxEmptyString,?b);
            148//????????c->AddProperty(b);
            149????????
            150????????sp->AddChild(c);
            151
            152????????
            153????????e?=?new?wxXmlProperty(wxT("end"),?wxString::Format(wxT("%d"),?m_data.erow));
            154????????b?=?new?wxXmlProperty(wxT("begin"),?wxString::Format(wxT("%d"),?m_data.brow),?e);
            155????????wxXmlNode*?r?=?new?wxXmlNode(NULL,?wxXML_ELEMENT_NODE,?wxT("RowRange"),?wxEmptyString,?b);
            156//????????r->AddProperty(b);
            157????????sp->AddChild(r);
            158
            159????????si->AddChild(sp);
            160????}

            161
            162????root->AddChild(si);
            163
            164//Box?Info
            165????wxXmlNode*?bi?=?new?wxXmlNode(NULL,?wxXML_ELEMENT_NODE,?wxT("BoxInfo"));
            166????for(Data::TBoxVector::const_iterator?it?=?m_data.vct.begin();?it?!=?m_data.vct.end();?++?it)
            167????{
            168????????wxXmlProperty*?s?=?NULL;
            169????????if(it->special)
            170????????????s?=?new?wxXmlProperty(wxT("special"),?wxT("T"));
            171
            172????????wxXmlProperty*?n?=?new?wxXmlProperty(wxT("name"),?it->name,?s);
            173????????wxXmlProperty*?i?=?new?wxXmlProperty(wxT("id"),?it->id,?n);
            174????????wxXmlNode*?b?=?new?wxXmlNode(NULL,?wxXML_ELEMENT_NODE,?wxT("Box"),?wxEmptyString,?i);
            175//????????b->AddProperty(i);
            176
            177????????bi->AddChild(b);
            178????}

            179
            180????root->AddChild(bi);
            181
            182????wxXmlDocument?doc;
            183????doc.SetRoot(root);
            184????if(!doc.Save(file))
            185????????return?-1;
            186
            187????return?0;
            188}

            ??? 邊學邊寫,凌亂的狠,還好,想來朋友Yao不會關心代碼是怎么寫的,只是自己看著不舒服了~對應的XML文件如下:
            <?xml?version="1.0"?encoding="utf-8"?>
            <RunSite>
            ??
            <SiteInfo>
            ????
            <Col>3</Col>
            ????
            <Row>4</Row>
            ????
            <Special>
            ??????
            <ColRange?begin="2"?end="3"/>
            ??????
            <RowRange?begin="3"?end="4"/>
            ????
            </Special>
            ??
            </SiteInfo>
            ??
            <BoxInfo>
            ????
            <Box?id="1"?name="11"/>
            ????
            <Box?id="2"?name="22"?special="T"/>
            ??
            </BoxInfo>
            </RunSite>

            posted on 2009-10-23 13:57 codejie 閱讀(1295) 評論(2)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: 記錄:wxXmlNode的使用[未登錄] 2009-10-24 01:49 Liu

            你現在很高產么……  回復  更多評論   

            # re: 記錄:wxXmlNode的使用 2009-10-26 09:35 codejie

            高產是因為給Yao的程序寫的差不多了~  回復  更多評論   

            公告

            Using C++

            導航

            統計

            留言簿(73)

            隨筆分類(513)

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产WWW456C0M| 色噜噜狠狠先锋影音久久| 久久久久18| 精品久久久久久无码中文字幕| 久久精品国产亚洲AV无码偷窥| 97久久婷婷五月综合色d啪蜜芽 | 久久婷婷五月综合色高清| 亚洲婷婷国产精品电影人久久 | 久久午夜夜伦鲁鲁片免费无码影视| 亚洲国产精久久久久久久| 精品久久久久久无码人妻蜜桃| 国产精品熟女福利久久AV| 国产精品美女久久久网AV| 久久青青草原精品国产软件| 国产成人精品久久亚洲| 久久精品女人天堂AV麻| 日韩久久无码免费毛片软件| 久久丫忘忧草产品| …久久精品99久久香蕉国产 | 久久久久久久尹人综合网亚洲| 热re99久久精品国产99热| 久久久久国产精品麻豆AR影院| 无码人妻少妇久久中文字幕| 伊人久久精品无码二区麻豆| 久久人爽人人爽人人片AV| 色综合久久中文综合网| 亚洲&#228;v永久无码精品天堂久久 | 久久只有这里有精品4| 麻豆亚洲AV永久无码精品久久| 久久本道伊人久久| 久久久这里有精品| 久久国产一区二区| 久久婷婷五月综合国产尤物app| 漂亮人妻被黑人久久精品| 精品久久久久久99人妻| 久久精品国产精品亚洲毛片| 久久精品国产一区二区| 久久99国产综合精品女同| 无码8090精品久久一区| 国产国产成人久久精品| 久久精品蜜芽亚洲国产AV|