wxXmlDocument
wxXmlDocumentを試してみる。wxWikiには、wxWidgetsには適当なXMLパーサがないと書かれていたがwxWidgets2.9からXML読み取り用のクラスを使えるようになったのだ。
ひとまずここのサイト『たのしいXML』サンプルファイル集からお借りしたXMLのサンプルファイル
<poem> <pno>8</pno> <mkana>熟田津尓 船乗世武登 月待者 潮毛可奈比沼 今者許藝乞菜</mkana> <poet>額田王(ぬかたのおおきみ)</poet> <yomi>熟田津(にきたつ)に、船(ふな)乗りせむと、月待てば、潮もかなひぬ、今は漕(こ)ぎ出(い)でな</yomi> <image>image/m0008.jpg</image> <mean>熟田津(にきたつ)で、船を出そうと月を待っていると、いよいよ潮の流れも良くなってきた。さあ、いまこそ船出するのです。</mean> </poem>
処理は以下
void XMLtest::OnButtonReadXML(wxCommandEvent& WXUNUSED(event)) { // ここからXMLファイルの読み取り wxXmlDocument doc; if (!doc.Load("sample-1.xml")) { // 読み取りが失敗したらステータスバーに失敗と表示 this->SetStatusText(wxT("読み込み失敗!")); } else { this->SetStatusText(wxT("読み込めたっぽい")); } if (doc.GetRoot()->GetName() != "poem") { // ノードの先頭の読み取りが失敗したらステータスバーに失敗と表示 this->SetStatusText(wxT("ノードの読み込み失敗!")); } else { this->SetStatusText(wxT("ノードもいけたっぽい")); } wxString xmlContents; wxXmlNode *child = doc.GetRoot()->GetChildren(); while (child) { if (child->GetName() == "yomi") { xmlContents += child->GetNodeContent(); } // 次の子要素に移動 child = child->GetNext(); } // テキストコントロールに内容を表示させる m_tc2->SetValue(xmlContents); }