単純な.xmlファイルをC++で読み書き(更新)する方法について多くのことを研究しましたが、そのコードを開発することができません。
私はDOMまたはSAX2パーサーを使用して読み取るために必要だと思うxerces-cライブラリをインストールしました。
誰かがそのコードを書くのを手伝ってください。
これを行うためのサンプルコードは非常に役立ちます。
ありがとう&よろしく、Adarsh Sharma
MSXMLをお勧めします。複雑に見えるかもしれませんが、慣れるととても簡単です。
サンプルは次のとおりです。
input.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Car>
<Wheels>
<Wheel1>FL</Wheel1>
<Wheel2>FR</Wheel2>
<Wheel3>RL</Wheel3>
<Wheel4>RR</Wheel4>
</Wheels>
</Car>
コード:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#import <msxml6.dll> rename_namespace(_T("MSXML"))
int main(int argc, char* argv[]) {
HRESULT hr = CoInitialize(NULL);
if (SUCCEEDED(hr)) {
try {
MSXML::IXMLDOMDocument2Ptr xmlDoc;
hr = xmlDoc.CreateInstance(__uuidof(MSXML::DOMDocument60),
NULL, CLSCTX_INPROC_SERVER);
// TODO: if (FAILED(hr))...
if (xmlDoc->load(_T("input.xml")) != VARIANT_TRUE) {
printf("Unable to load input.xml\n");
} else {
printf("XML was successfully loaded\n");
xmlDoc->setProperty("SelectionLanguage", "XPath");
MSXML::IXMLDOMNodeListPtr wheels = xmlDoc->selectNodes("/Car/Wheels/*");
printf("Car has %u wheels\n", wheels->Getlength());
MSXML::IXMLDOMNodePtr node;
node = xmlDoc->createNode(MSXML::NODE_ELEMENT, _T("Engine"), _T(""));
node->text = _T("Engine 1.0");
xmlDoc->documentElement->appendChild(node);
hr = xmlDoc->save(_T("output.xml"));
if (SUCCEEDED(hr))
printf("output.xml successfully saved\n");
}
} catch (_com_error &e) {
printf("ERROR: %ws\n", e.ErrorMessage());
}
CoUninitialize();
}
return 0;
}
出力:XMLが正常にロードされました車には4つのホイールが正常に保存されていますoutput.xml
output.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Car>
<Wheels>
<WheelLF>1</WheelLF>
<WheelRF>2</WheelRF>
<WheelLR>3</WheelLR>
<WheelRR>4</WheelRR>
</Wheels>
<Engine>Engine 1.0</Engine></Car>
ここで必要なものがすべて見つかります。
http://msdn.Microsoft.com/en-us/library/ms765540(v = vs.85).aspx
誰かがこれが役に立つと思うことを願っています;)
Boostシリアライザはそのトリックを実行できます。オブジェクトをオブジェクトに渡すと、すべてのクラスプロパティを含むファイル(バイナリまたはXML、さらには単純なテキストファイル)が書き込まれます。