- XML(标记扩展语言)
XML 指可扩展标记语言(eXtensible Markup Language)。XML 被设计用来传输和存储数据。
- TinyXml库
TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作
- TinyXml下载地址
- TinyXml类结构
TiXmlBase:整个TinyXML模型的基类。
TiXmlAttribute:对应于XML中的元素的属性。
TiXmlNode:对应于DOM结构中的节点。父类是TiXmlBase
TiXmlComment:对应于XML中的注释
TiXmlDeclaration:对应于XML中的申明部分,即<?versiong=“1.0” ?>
TiXmlDocument:对应于XML的整个文档, 也是顶级节点
TiXmlElement:对应于XML的元素
TiXmlText:对应于XML的文字部分
TiXmlUnknown:对应于XML的未知部分(无法识别的标签另存为未知部分)
TiXmlHandler:定义了针对XML的一些操作
- TinyXml的使用
解压缩tinyXML后 会有两个.h文件和四个.cpp文件,分别是
tinystr.h
、tinystr.cpp
、tinyxml.h
、tinyxml.cpp
、tinyxmlerror.cpp
、tinyxmlparser.cpp
。在使用中只需要加入tinyxml.h
头文件即可#include "tinyxml.h"
- 利用TinyXml读xml文档
bool LoadXmlDoc(const string pszXmlFileName)
{
TiXmlDocument* docXml = new TiXmlDocument(pszXmlFileName);
if (!docXml->LoadFile())
{
return false;
}
TiXmlElement* pRootElement = docXml->RootElement();
cout << pRootElement->Value() << endl;
if (pRootElement)
{
TiXmlElement* stock_payh = pRootElement->FirstChildElement();
cout <<stock_payh->Value() << " ID: " << stock_payh->Attribute("Id") << " TYPE: " << stock_payh->Attribute("type") << endl;
TiXmlElement* name = stock_payh->FirstChildElement("name");
cout << name->Value() << " value: " << name->GetText() << endl;
TiXmlElement* npreClosePx = stock_payh->FirstChildElement("npreClosePx");
cout << npreClosePx->Value() << " value: " << npreClosePx->GetText() << endl;
TiXmlElement* nOpenPx = stock_payh->FirstChildElement("nOpenPx");
cout << nOpenPx->Value() << " value: " << nOpenPx->GetText() << endl;
TiXmlElement* nHighPx = stock_payh->FirstChildElement("nHighPx");
cout << nHighPx->Value() << " value: " << nHighPx->GetText() << endl;
TiXmlElement* nLowPx = stock_payh->FirstChildElement("nLowPx");
cout << nLowPx->Value() << " value: " << nLowPx->GetText() << endl;
TiXmlElement* nClosePx = stock_payh->FirstChildElement("nClosePx");
cout << nClosePx->Value() << " value: " << nClosePx->GetText() << endl;
}
return true;
}
调用结果
- 利用TinyXml写xml文档
bool SaveXmlDoc(const string strInipathName)
{
TiXmlDocument* docXml = new TiXmlDocument();
// XML的声明 版本和使用编码
TiXmlDeclaration* decl = new TiXmlDeclaration("1.0", "GB2312", "");
docXml->LinkEndChild(decl);
TiXmlElement* pRootElement = new TiXmlElement("SecurityInfo");
docXml->LinkEndChild(pRootElement);
TiXmlElement* stock_payh = new TiXmlElement("Stock");
pRootElement->LinkEndChild(stock_payh);
stock_payh->SetAttribute("Id", "000001");
stock_payh->SetAttribute("type", "double");
TiXmlElement* name = new TiXmlElement("name");
stock_payh->LinkEndChild(name);
TiXmlText* name_content = new TiXmlText("平安银行");
name->LinkEndChild(name_content);
TiXmlElement* npreClosePx = new TiXmlElement("npreClosePx");
stock_payh->LinkEndChild(npreClosePx);
TiXmlText* npreClosePx_content = new TiXmlText("16.79");
npreClosePx->LinkEndChild(npreClosePx_content);
TiXmlElement* nOpenPx = new TiXmlElement("nOpenPx");
stock_payh->LinkEndChild(nOpenPx);
TiXmlText* nOpenPx_content = new TiXmlText("16.66");
nOpenPx->LinkEndChild(nOpenPx_content);
TiXmlElement* nHighPx = new TiXmlElement("nHighPx");
stock_payh->LinkEndChild(nHighPx);
TiXmlText* nHighPx_content = new TiXmlText("16.81");
nHighPx->LinkEndChild(nHighPx_content);
TiXmlElement* nLowPx = new TiXmlElement("nLowPx");
stock_payh->LinkEndChild(nLowPx);
TiXmlText* nLowPx_content = new TiXmlText("16.52");
nLowPx->LinkEndChild(nLowPx_content);
TiXmlElement* nClosePx = new TiXmlElement("nClosePx");
stock_payh->LinkEndChild(nClosePx);
TiXmlText* nClosePx_content = new TiXmlText("16.70");
nClosePx->LinkEndChild(nClosePx_content);
if (!docXml->SaveFile(strInipathName.c_str()))
{
delete docXml;
return false;
}
delete docXml;
return true;
}
调用结果