在 C++ 中读写 XML 文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5415788/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Read Write XML File In C++
提问by Adarsh Sharma
I researched a lot on how to read and write ( update ) a simple .xml file in C++ but i am not able to develop the code for it.
我对如何在 C++ 中读取和写入(更新)一个简单的 .xml 文件进行了大量研究,但我无法为其开发代码。
I work and installed xerces-c library that I think is needed to use DOM or SAX2 parser to read it.
我工作并安装了 xerces-c 库,我认为需要使用 DOM 或 SAX2 解析器来读取它。
Please someone can help to write the code for it.
请有人可以帮助编写代码。
A sample code to do this will be quite helpful.
执行此操作的示例代码将非常有帮助。
Thanks & best Regards, Adarsh Sharma
谢谢和最好的问候, Adarsh Sharma
回答by LihO
I recommend MSXML. It may look complicated, but it's nice and easy when you get used to it.
Here's a sample:
我推荐 MSXML。它可能看起来很复杂,但当你习惯它时它会很好很容易。
这是一个示例:
input.xml:
输入.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Car>
<Wheels>
<Wheel1>FL</Wheel1>
<Wheel2>FR</Wheel2>
<Wheel3>RL</Wheel3>
<Wheel4>RR</Wheel4>
</Wheels>
</Car>
code:
代码:
#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;
}
output: XML was successfully loaded Car has 4 wheels output.xml successfully saved
输出:XML 已成功加载 Car有 4 个轮子 output.xml 已成功保存
output.xml:
输出.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>
You will find everything you need here:
http://msdn.microsoft.com/en-us/library/ms765540(v=vs.85).aspx
你会在这里找到你需要的一切:http:
//msdn.microsoft.com/en-us/library/ms765540(v=vs.85).aspx
Hope someone finds this useful ;)
希望有人觉得这很有用 ;)
回答by JosephITA
Boost serializer can do the trick, if you pass an object to it, it write a file (binary or xml or even a simple text file) with all the class properties.
Boost 序列化器可以做到这一点,如果您将一个对象传递给它,它会写入一个包含所有类属性的文件(二进制或 xml 甚至一个简单的文本文件)。