在C ++中读取写入XML文件 [英] Read Write XML File In C++

查看:183
本文介绍了在C ++中读取写入XML文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我研究了很多关于如何在C ++中读写(更新)一个简单的.xml文件,但我不能为它开发代码。



我工作和安装xerces-c库,我认为是需要使用DOM或SAX2解析器来读它。



请有人可以帮助编写代码。 / p>

这样做的示例代码将非常有用。



最好的问候,
Adarsh Sharma

解决方案

我推荐MSXML。它可能看起来很复杂,但是当它习惯了它是很好,很容易。

这里是一个示例:



input.xml:

 <?xml version =1.0encoding =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
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(无法加载input.xml\\\
);
}
else
{
printf(XML has successfully loaded\\\
);

xmlDoc-> setProperty(SelectionLanguage,XPath);
MSXML :: IXMLDOMNodeListPtr wheels = xmlDoc-> selectNodes(/ Car / Wheels / *);
printf(Car has%u wheels \\\
,wheels-> Getlength());

MSXML :: IXMLDOMNodePtr节点;
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\\\
);
}
}
catch(_com_error& e)
{
printf(ERROR:%ws\\\
,e.ErrorMessage());
}
CoUninitialize();
}
return 0;
}

输出:
XML已成功载入
4轮
output.xml已成功保存



output.xml:

 <?xml version =1.0encoding =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



希望有人认为这很有用);


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.

I work and installed xerces-c library that I think is needed to use DOM or SAX2 parser to read it.

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

解决方案

I recommend MSXML. It may look complicated, but it's nice and easy when you get used to it.
Here's a sample:

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>

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

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>

You will find everything you need here:
http://msdn.microsoft.com/en-us/library/ms765540(v=vs.85).aspx

Hope someone finds this useful ;)

这篇关于在C ++中读取写入XML文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆