python解析xml&& C++读取XML文件

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)输出结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值