Python
xml文件内容
<?xml version="1.0" encoding="utf-8"?>
<root>
<person age="18">
<name>hzj</name>
<sex>man</sex>
</person>
<person age="19" des="hello">
<name>kiki</name>
<sex>female</sex>
</person>
</root>
解析代码
# encoding=utf-8
from xml.etree import ElementTree as ET
# 要找出所有人的年龄
per = ET.parse('test.xml')
p = per.findall('./person')
for x in p:
print (x.attrib)
print
for oneper in p: # 找出person节点
for child in oneper: # 找出person节点的子节点
print (child.tag, ':', child.text)
print ('age:', oneper.get('age'))
print ('############')
输出结果
C++
以读取如下的XML文件为例:
1)下载:tinyxml_2_6_2,将下面6个文件拷贝纸工程文件夹(2个头文件,4个cpp文件)
2)在工程文件里添加头文件和cpp文件
3)添加头文件
4)读取代码如下:
#include "TibetanPositioning.h"
string m_strXmlPath = "E:\\sxl_Programs\\Python\\xml\\2.xml"; //文件名
//box参数结构体
struct BoxSize
{
int xMin;
int yMin;
int xMax;
int yMax;
};
bool ReadParaXml(string m_strXmlPath, vector<BoxSize>& vecNode)
{
BoxSize *pNode = new BoxSize;
//读取xml文件中的参数值
TiXmlDocument* Document = new TiXmlDocument();
if (!Document->LoadFile(m_strXmlPath.c_str()))
{
cout << "无法加载xml文件!" << endl;
cin.get();
return false;
}
TiXmlElement* RootElement = Document->RootElement(); //根目录
TiXmlElement* NextElement = RootElement->FirstChildElement(); //根目录下的第一个节点层
//for(NextElement;NextElement;NextElement = NextElement->NextSiblingElement())
while (NextElement != NULL) //判断有没有读完
{
if (NextElement->ValueTStr() == "object") //读到object节点
{
//NextElement = NextElement->NextSiblingElement();
TiXmlElement* BoxElement = NextElement->FirstChildElement();
while (BoxElement->ValueTStr() != "bndbox") //读到box节点
{
BoxElement = BoxElement->NextSiblingElement();
}
//索引到xmin节点
TiXmlElement* xminElemeng = BoxElement->FirstChildElement();
{
//分别读取四个数值
pNode->xMin = atof(xminElemeng->GetText());
TiXmlElement* yminElemeng = xminElemeng->NextSiblingElement();
pNode->yMin = atof(yminElemeng->GetText());
TiXmlElement* xmaxElemeng = yminElemeng->NextSiblingElement();
pNode->xMax = atof(xmaxElemeng->GetText());
TiXmlElement* ymaxElemeng = xmaxElemeng->NextSiblingElement();
pNode->yMax = atof(ymaxElemeng->GetText());
//加入到向量中
vecNode.push_back(*pNode);
}
}
NextElement = NextElement->NextSiblingElement();
}
//释放内存
delete pNode;
delete Document;
cout << "完成xml的读取" << endl;
//输出结果
for (int ia = 0; ia < vecNode.size(); ia++)
{
cout << "xMin:" << vecNode[ia].xMin << "yMin:" << vecNode[ia].yMin << "xMax:" << vecNode[ia].xMax << "yMax:" << vecNode[ia].yMax << endl;
}
return true;
}
void main()
{
vector<BoxSize> vecNode;
bool bRead=ReadParaXml(m_strXmlPath,vecNode);
system("pause");
}
5)输出结果如下: