なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

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);
}


出来上がり図