System::XML::Linqをリンクする
以下を先頭に追加
using namespace System::Xml::Linq; int main(array<System::String^>^ args) { // ② 追加する要素を作成 XElement ^man1; { XElement^ ext; ext = gcnew XElement("その他"); ext->Add(gcnew XElement("特技", L"昼寝")); man1 = gcnew XElement("個人データ", gcnew XElement("名前", "山田太郎"), gcnew XElement("年齢", 45), gcnew XElement("住所", "愛媛県松山市"), ext ); } // ② 追加する要素を作成 XElement^ man2; { XElement^ ext; ext = gcnew XElement("その他"); ext->Add(gcnew XElement("特技", L"懸垂")); man2 = gcnew XElement("個人データ", gcnew XElement("名前", "西田花子"), gcnew XElement("年齢", 15), gcnew XElement("住所", "北海道札幌市"), ext ); } // ② 追加する要素を作成 XElement^ man3; { XElement^ ext; ext = gcnew XElement("その他"); ext->Add(gcnew XElement("特技", L"読書")); man3 = gcnew XElement("個人データ", gcnew XElement("名前", "岡田広美"), gcnew XElement("年齢", 35), gcnew XElement("住所", "沖縄県中城村"), ext ); } XElement^ root = gcnew XElement("root"); // ① XDocumentオブジェクトを作成 XDocument^ alldata = gcnew XDocument( gcnew XComment("利用者の全情報"), root ); // ③ XDocumentにXElementを追加 root->Add(man1); root->Add(man2); root->Add(man3); // ④ ファイル保存 alldata->Save("C:\\mydata\\others\\個人データ1.xml"); }
<?xml version="1.0" encoding="utf-8"?> <!--利用者の全情報--> <root> <個人データ> <名前>山田太郎</名前> <年齢>45</年齢> <住所>愛媛県松山市</住所> <その他> <特技>昼寝</特技> </その他> </個人データ> <個人データ> <名前>西田花子</名前> <年齢>15</年齢> <住所>北海道札幌市</住所> <その他> <特技>懸垂</特技> </その他> </個人データ> <個人データ> <名前>岡田広美</名前> <年齢>35</年齢> <住所>沖縄県中城村</住所> <その他> <特技>読書</特技> </その他> </個人データ> </root>
using namespace System::Xml::Linq; int main(array<System::String ^> ^args) { // XMLファイルを開く XDocument^ xml = XDocument::Load("C:\\mydata\\others\\個人データ1.xml"); XElement^ root = xml->Element("root"); //イテレータの取得 System::Collections::Generic::IEnumerable<XElement^>^ xelements = root->Elements(); for each (XElement ^ k in xelements) { // k には<個人データ>の内容が入っている System::String^ name = k->Element("名前")->Value; int age = int::Parse(k->Element("年齢")->Value); System::String^ addr = k->Element("住所")->Value; System::String^ adv = k->Element("その他")->Element("特技")->Value; //読み取った内容表示 System::Console::WriteLine(name); System::Console::WriteLine(age); System::Console::WriteLine(addr); System::Console::WriteLine(adv); System::Console::WriteLine("--------------"); } return 0; }
CSharpの情報はたくさん出てくる。そしてそれを真似ればうまくいく。99.9%うまくいく。しかしC++CLIから使う場合CSharpのコードからは必要な情報が読み取りにくい。具体的には型情報と名前空間あたりがさっぱりわからない。そもそもC++CLIなんて積極的に使う言語じゃないから自分の中に技術が蓄積しない。加えて情報が少ない。公式にすらろくに無い。その上CSharpの情報で大抵事足りる。故に逆に一度詰まると基本的なことがわからなくて彷徨うことになる。というか、彷徨った。