Tinyxml一一利用tinyxml读取节点属性完整代码

//GlobalParams_Defination
#include <Windows.h>
#include <map>
#include <vector>
#include <string>
using namespace std;

typedef struct
{
	vector<string> v_param;
}_STL_1VEC_PARAM,*_pSTL_1VEC_PARAM;

typedef struct  
{
	vector<string> v_param;
	map<string,string> m_param;
}_STL_1MAP_PARAM,*_pSTL_1MAP_PARAM;

typedef struct  
{
	vector<string> v_param;
	map<string,_STL_1MAP_PARAM> m_param;
}_STL_2MAP_PARAM,*_pSTL_2MAP_PARAM;

typedef struct  
{
	vector<string> v_param;
	map<string,_STL_2MAP_PARAM> m_param;
}_STL_3MAP_PARAM,*_pSTL_3MAP_PARAM;
//TinyxmlEngine.h
#pragma once
#include "tinyxml.h"
#include "GlobalParams_Defination.h"
class CTinyxmlEngine
{
public:
	CTinyxmlEngine(void);
	virtual ~CTinyxmlEngine(void);

public:
	void Erase_Param_1AMP(_STL_1MAP_PARAM&m_param);
	void Erase_Param_2AMP(_STL_2MAP_PARAM&m_param);
	void Erase_Param_3AMP(_STL_3MAP_PARAM&m_param);

	//ReadAttr
	bool Read_XML_1Floor_Attr(const char*pszPath,const char*pszNode,_STL_1MAP_PARAM&m_param);
	bool Read_XML_1Floor_Attr(const char*pszPath,const char*pszNode,const char*pszNode1,_STL_1MAP_PARAM&m_param);
	bool Read_XML_1Floor_Attr(const char*pszPath,const char*pszNode,const char*pszNode1,const char*pszNode2,_STL_1MAP_PARAM&m_param); 

	bool Read_XML_2Floor_Attr(const char*pszPath,_STL_2MAP_PARAM&m_param);
	bool Read_XML_2Floor_Attr(const char*pszPath,const char*pszNode,_STL_2MAP_PARAM&m_param);
	bool Read_XML_2Floor_Attr(const char*pszPath,const char*pszNode,const char*pszNode1,_STL_2MAP_PARAM&m_param);

	bool Read_XML_3Floor_Attr(const char*pszPath,_STL_3MAP_PARAM&m_param);
	bool Read_XML_3Floor_Attr(const char*pszPath,const char*pszNode,_STL_3MAP_PARAM&m_param);

};
//TinyxmlEngine.cpp
#include "TinyxmlEngine.h"


CTinyxmlEngine::CTinyxmlEngine(void)
{
}


CTinyxmlEngine::~CTinyxmlEngine(void)
{
}

void CTinyxmlEngine::Erase_Param_1AMP(_STL_1MAP_PARAM&m_param)
{
	m_param.v_param.clear();
	m_param.m_param.clear();
}

void CTinyxmlEngine::Erase_Param_2AMP(_STL_2MAP_PARAM&m_param)
{
	m_param.v_param.clear();
	m_param.m_param.clear();
}

void CTinyxmlEngine::Erase_Param_3AMP(_STL_3MAP_PARAM&m_param)
{
	m_param.v_param.clear();
	m_param.m_param.clear();
}
/************************************************************************/
/*	Read XML Attribute													*/
/************************************************************************/
/*
<FileRoot>
	<Attr1 ip="192.168.0.1" timeout="123.456000"/>
	<Attr2 ip="192.168.0.1" timeout="123.456000"/>
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_1Floor_Attr(const char*pszPath,const char*pszNode,_STL_1MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode*p_node = p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName=p_node->Value();
		if (strcmp(pszXmlName,pszNode)==0)
		{
			TiXmlElement*p_element = p_node->ToElement();
			for (TiXmlAttribute*p_attribute = p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
			{
				pszXmlName = p_attribute->Name();
				pszXmlValue = p_attribute->Value();
				if (NULL!=pszXmlValue)
				{
					m_param.v_param.push_back(pszXmlName);
					m_param.m_param.insert(map<string,string>::value_type(pszXmlName,pszXmlValue));
				}
			}
			break;
		}
	}
	return true;
}
/*
<FileRoot>
	<Attr_1Floor>
		<Attr1 name="Attr1" x="5" y="15" w="400" h="250"/>
		<Attr2 name="Attr2" x="5" y="15" w="400" h="250"/>
	</Attr_1Floor>
	...
	...
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_1Floor_Attr(const char*pszPath,const char*pszNode/*Attr_1Floor*/,const char*pszNode1/*Attr1*/,_STL_1MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue,*pszXmlName1;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode* p_node=p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName = p_node->Value();
		if (strcmp(pszXmlName,pszNode)==0)
		{
			TiXmlElement* p_element = p_node->ToElement();
			for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
			{
				pszXmlName = p_node->Value();
				if (strcmp(pszXmlName,pszNode1)==0)
				{
					TiXmlElement*p_element = p_node->ToElement();
					for (TiXmlAttribute* p_attribute=p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
					{
						pszXmlName1 = p_attribute->Name();
						pszXmlValue = p_attribute->Value();
						if (pszXmlValue!=NULL)
						{
							m_param.v_param.push_back(pszXmlName1);
							m_param.m_param.insert(make_pair(pszXmlName1,pszXmlValue));
						}
					}
				}
			}
		}
	}
	return true;
}
/*
<FileRoot>
	<Floor2>
		<Attr_1Floor>
			<Attr1 name="Attr1" x="5" y="15" w="400" h="250"/>
			<Attr2 name="Attr2" x="5" y="15" w="400" h="250"/>
		</Attr_1Floor>
	</Floor2>
	...
	...
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_1Floor_Attr(const char*pszPath,const char*pszNode/*Floor2*/,const char*pszNode1/*Attr_1Floor*/,const char*pszNode2/*Attr1*/,_STL_1MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue,*pszXmlName1;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode* p_node=p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName = p_node->Value();
		if (strcmp(pszXmlName,pszNode)==0)
		{
			TiXmlElement* p_element = p_node->ToElement();
			for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
			{
				pszXmlName = p_node->Value();
				if (strcmp(pszXmlName,pszNode1)==0)
				{
					TiXmlElement* p_element = p_node->ToElement();
					for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
					{
						pszXmlName = p_node->Value();
						if (strcmp(pszXmlName,pszNode2)==0)
						{
							TiXmlElement*p_element = p_node->ToElement();
							for (TiXmlAttribute* p_attribute=p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
							{
								pszXmlName1 = p_attribute->Name();
								pszXmlValue = p_attribute->Value();
								if (pszXmlValue!=NULL)
								{
									m_param.v_param.push_back(pszXmlName1);
									m_param.m_param.insert(make_pair(pszXmlName1,pszXmlValue));
								}
							}
						}
					}
				}
			}
		}
	}
	return true;
}
/*
<FileRoot>
	<Attr1 ip="192.168.0.1" timeout="123.456000"/>
	<Attr2 ip="192.168.0.1" timeout="123.456000"/>
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_2Floor_Attr(const char*pszPath,_STL_2MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue,*pszXmlName1;
	_STL_1MAP_PARAM m_param1;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode* p_node=p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName = p_node->Value();
		if (pszXmlName!=NULL)
		{
			TiXmlElement* p_element = p_node->ToElement();
			m_param1.m_param.clear();
			m_param1.v_param.clear();
			for (TiXmlAttribute* p_attribute=p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
			{
				pszXmlName1 = p_attribute->Name();
				pszXmlValue = p_attribute->Value();
				if (pszXmlValue!=NULL)
				{
					m_param1.v_param.push_back(pszXmlName1);
					m_param1.m_param.insert(make_pair(pszXmlName1,pszXmlValue));
				}
			}
			if (!m_param1.v_param.empty())
			{
				m_param.v_param.push_back(pszXmlName);
				m_param.m_param.insert(make_pair(pszXmlName,m_param1));
			}
		}
	}
	return true;
}
/*
<FileRoot>
	<Attr_1Floor>
		<Attr1 name="Attr1" x="5" y="15" w="400" h="250"/>
		<Attr2 name="Attr2" x="5" y="15" w="400" h="250"/>
	</Attr_1Floor>
	...
	...
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_2Floor_Attr(const char*pszPath,const char*pszNode,_STL_2MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue,*pszXmlName1;
	_STL_1MAP_PARAM m_param1;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode*p_node = p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName = p_node->Value();
		if (strcmp(pszXmlName,pszNode)==0)
		{
			TiXmlElement*p_element = p_node->ToElement();
			for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
			{
				pszXmlName=p_node->Value();
				TiXmlElement*p_element = p_node->ToElement();
				m_param1.m_param.clear();
				m_param1.v_param.clear();
				for (TiXmlAttribute*p_attribute = p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
				{
					pszXmlName1 = p_attribute->Name();
					pszXmlValue = p_attribute->Value();
					if (NULL!=pszXmlValue)
					{
						m_param1.v_param.push_back(pszXmlName1);
						m_param1.m_param.insert(map<string,string>::value_type(pszXmlName1,pszXmlValue));
					}
				}
				if (!m_param1.v_param.empty())
				{
					m_param.v_param.push_back(pszXmlName);
					m_param.m_param.insert(map<string,_STL_1MAP_PARAM>::value_type(pszXmlName,m_param1));
				}
			}
			break;
		}
	}
	return true;
}
/*
<FileRoot>
	<Floor2>
		<Attr_1Floor>
			<Attr1 name="Attr1" x="5" y="15" w="400" h="250"/>
			<Attr2 name="Attr2" x="5" y="15" w="400" h="250"/>
		</Attr_1Floor>
	</Floor2>
	...
	...
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_2Floor_Attr(const char*pszPath,const char*pszNode/*Floor2*/,const char*pszNode1/*Attr_1Floor*/,_STL_2MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue,*pszXmlName1;
	_STL_1MAP_PARAM m_param1;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode*p_node = p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName = p_node->Value();
		if (strcmp(pszXmlName,pszNode)==0)
		{
			TiXmlElement*p_element = p_node->ToElement();
			for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
			{
				pszXmlName=p_node->Value();
				if (strcmp(pszXmlName,pszNode1)==0)
				{
					TiXmlElement*p_element = p_node->ToElement();
					for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
					{
						pszXmlName=p_node->Value();
						TiXmlElement*p_element = p_node->ToElement();
						m_param1.m_param.clear();
						m_param1.v_param.clear();
						for (TiXmlAttribute*p_attribute = p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
						{
							pszXmlName1 = p_attribute->Name();
							pszXmlValue = p_attribute->Value();
							if (NULL!=pszXmlValue)
							{
								m_param1.v_param.push_back(pszXmlName1);
								m_param1.m_param.insert(map<string,string>::value_type(pszXmlName1,pszXmlValue));
							}
						}
						if (!m_param1.v_param.empty())
						{
							m_param.v_param.push_back(pszXmlName);
							m_param.m_param.insert(map<string,_STL_1MAP_PARAM>::value_type(pszXmlName,m_param1));
						}
					}
				}
			}
			break;
		}
	}
	return true;
}
/*
<FileRoot>
	<Attr_1Floor>
		<Attr1 name="Attr1" x="5" y="15" w="400" h="250"/>
		<Attr2 name="Attr2" x="5" y="15" w="400" h="250"/>
	</Attr_1Floor>
	...
	...
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_3Floor_Attr(const char*pszPath,_STL_3MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue,*pszXmlName1,*pszXmlName2;
	_STL_1MAP_PARAM m_param1;
	_STL_2MAP_PARAM m_param2;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode*p_node = p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName = p_node->Value();
		TiXmlElement*p_element = p_node->ToElement();
		m_param2.m_param.clear();
		m_param2.v_param.clear();
		for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
		{
			pszXmlName1=p_node->Value();
			TiXmlElement*p_element = p_node->ToElement();
			m_param1.m_param.clear();
			m_param1.v_param.clear();
			for (TiXmlAttribute*p_attribute = p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
			{
				pszXmlName2 = p_attribute->Name();
				pszXmlValue = p_attribute->Value();
				if (NULL!=pszXmlValue)
				{
					m_param1.v_param.push_back(pszXmlName2);
					m_param1.m_param.insert(map<string,string>::value_type(pszXmlName2,pszXmlValue));
				}
			}
			if (!m_param1.v_param.empty())
			{
				m_param2.v_param.push_back(pszXmlName1);
				m_param2.m_param.insert(map<string,_STL_1MAP_PARAM>::value_type(pszXmlName1,m_param1));
			}
		}
		if (!m_param2.v_param.empty())
		{
			m_param.v_param.push_back(pszXmlName);
			m_param.m_param.insert(map<string,_STL_2MAP_PARAM>::value_type(pszXmlName,m_param2));
		}
	}
	return true;
}
/*
<FileRoot>
	<Floor2>
		<Attr_1Floor>
			<Attr1 name="Attr1" x="5" y="15" w="400" h="250"/>
			<Attr2 name="Attr2" x="5" y="15" w="400" h="250"/>
		</Attr_1Floor>
	</Floor2>
	...
	...
</FileRoot>
*/
bool CTinyxmlEngine::Read_XML_3Floor_Attr(const char*pszPath,const char*pszNode/*Floor2*/,_STL_3MAP_PARAM&m_param)
{
	TiXmlDocument doc(pszPath);
	if (!doc.LoadFile())
	{
		return false;
	}
	const char*pszXmlName,*pszXmlValue,*pszXmlName1,*pszXmlName2;
	_STL_1MAP_PARAM m_param1;
	_STL_2MAP_PARAM m_param2;
	TiXmlElement* p_root = doc.RootElement();
	for (TiXmlNode*p_node = p_root->FirstChildElement();p_node;p_node=p_node->NextSiblingElement())
	{
		pszXmlName = p_node->Value();
		if (strcmp(pszXmlName,pszNode)==0)
		{
			TiXmlElement *p_element = p_node->ToElement();
			for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
			{
				TiXmlElement*p_element = p_node->ToElement();
				m_param2.m_param.clear();
				m_param2.v_param.clear();
				for (TiXmlNode*p_node = p_element->FirstChildElement();p_node;p_node = p_node->NextSiblingElement())
				{
					pszXmlName1=p_node->Value();
					TiXmlElement*p_element = p_node->ToElement();
					m_param1.m_param.clear();
					m_param1.v_param.clear();
					for (TiXmlAttribute*p_attribute = p_element->FirstAttribute();p_attribute;p_attribute=p_attribute->Next())
					{
						pszXmlName2 = p_attribute->Name();
						pszXmlValue = p_attribute->Value();
						if (NULL!=pszXmlValue)
						{
							m_param1.v_param.push_back(pszXmlName2);
							m_param1.m_param.insert(map<string,string>::value_type(pszXmlName2,pszXmlValue));
						}
					}
					if (!m_param1.v_param.empty())
					{
						m_param2.v_param.push_back(pszXmlName1);
						m_param2.m_param.insert(map<string,_STL_1MAP_PARAM>::value_type(pszXmlName1,m_param1));
					}
				}
				if (!m_param2.v_param.empty())
				{
					m_param.v_param.push_back(pszXmlName);
					m_param.m_param.insert(map<string,_STL_2MAP_PARAM>::value_type(pszXmlName,m_param2));
				}
			}
		}
	}
	return true;
}

函数调用:

#include <iostream>
#include <string>
#include "TinyxmlEngine.h"
using namespace std;

void Print_m_param1(_STL_1MAP_PARAM m_param1)
{
	vector<string>::iterator it = m_param1.v_param.begin();
	for (;it!=m_param1.v_param.end();++it)
	{
		cout<<"   "<<*it<<": "<<m_param1.m_param[*it]<<endl;
	}
	cout<<"================================"<<endl;
}

void Print_m_param2(_STL_2MAP_PARAM m_param2)
{
	vector<string>::iterator it = m_param2.v_param.begin();
	for (;it!=m_param2.v_param.end();++it)
	{
		cout<<*it<<":"<<endl;
		_STL_1MAP_PARAM m_param1 = m_param2.m_param[*it];
		vector<string>::iterator it1 = m_param1.v_param.begin();
		for (;it1!=m_param1.v_param.end();++it1)
		{
			cout<<"   "<<*it1<<": "<<m_param1.m_param[*it1]<<endl;
		}
		cout<<"================================"<<endl;
	}
}

void Print_m_param3(_STL_3MAP_PARAM m_param3)
{
	vector<string>::iterator it = m_param3.v_param.begin();
	for (;it!=m_param3.v_param.end();++it)
	{
		cout<<*it<<":"<<endl;
		_STL_2MAP_PARAM m_param2;
		m_param2 = m_param3.m_param[*it];
		vector<string>::iterator it = m_param2.v_param.begin();
		for (;it!=m_param2.v_param.end();++it)
		{
			cout<<"   "<<*it<<":"<<endl;
			_STL_1MAP_PARAM m_param1 = m_param2.m_param[*it];
			vector<string>::iterator it1 = m_param1.v_param.begin();
			for (;it1!=m_param1.v_param.end();++it1)
			{
				cout<<"      "<<*it1<<": "<<m_param1.m_param[*it1]<<endl;
			}
		}
		cout<<"================================"<<endl;
	}
}

int main()
{
	CTinyxmlEngine m_engine;
	_STL_1MAP_PARAM  m_param1;
	m_engine.Read_XML_1Floor_Attr("Attr.xml","Attr1",m_param1);
	Print_m_param1(m_param1);

	m_engine.Erase_Param_1AMP(m_param1);
	m_engine.Read_XML_1Floor_Attr("Attr.xml","Attr_1Floor","Attr1",m_param1);
	Print_m_param1(m_param1);

	m_engine.Erase_Param_1AMP(m_param1);
	m_engine.Read_XML_1Floor_Attr("Attr.xml","Floor2","Attr_1Floor","Attr1",m_param1);
	Print_m_param1(m_param1);

	_STL_2MAP_PARAM  m_param2;
	m_engine.Read_XML_2Floor_Attr("Attr.xml",m_param2);
	Print_m_param2(m_param2);

	m_engine.Erase_Param_2AMP(m_param2);
	m_engine.Read_XML_2Floor_Attr("Attr.xml","Attr_1Floor",m_param2);
	Print_m_param2(m_param2);

	m_engine.Erase_Param_2AMP(m_param2);
	m_engine.Read_XML_2Floor_Attr("Attr.xml","Floor2","Attr_1Floor",m_param2);
	Print_m_param2(m_param2);

	_STL_3MAP_PARAM m_param3;
	m_engine.Read_XML_3Floor_Attr("Attr.xml",m_param3);
	Print_m_param3(m_param3);

	m_engine.Erase_Param_3AMP(m_param3);
	m_engine.Read_XML_3Floor_Attr("Attr.xml","Floor2",m_param3);
	Print_m_param3(m_param3);

	return 0;
}

附上读取的xml文件:

<?xml version="1.0" standalone="yes" encoding="utf-8"?>
<FileRoot>
	<Attr1 ip="192.168.0.1" timeout="123.456000"/>
	<Attr2 ip="192.168.0.1" timeout="123.456000"/>
	<Attr_1Floor>
		<Attr1 name="Attr1" x="5" y="15" w="400" h="250"/>
		<Attr2 name="Attr2" x="5" y="15" w="400" h="250"/>
	</Attr_1Floor>
	<Floor2>
		<Attr_1Floor>
			<Attr1 name="Attr1" x="5" y="15" w="400" h="25"/>
			<Attr2 name="Attr2" x="5" y="15" w="400" h="25"/>
		</Attr_1Floor>
	</Floor2>
</FileRoot>

运行结果:

   ip: 192.168.0.1
   timeout: 123.456000
================================
   name: Attr1
   x: 5
   y: 15
   w: 400
   h: 250
================================
   name: Attr1
   x: 5
   y: 15
   w: 400
   h: 25
================================
Attr1:
   ip: 192.168.0.1
   timeout: 123.456000
================================
Attr2:
   ip: 192.168.0.1
   timeout: 123.456000
================================
Attr1:
   name: Attr1
   x: 5
   y: 15
   w: 400
   h: 250
================================
Attr2:
   name: Attr2
   x: 5
   y: 15
   w: 400
   h: 250
================================
Attr1:
   name: Attr1
   x: 5
   y: 15
   w: 400
   h: 25
================================
Attr2:
   name: Attr2
   x: 5
   y: 15
   w: 400
   h: 25
================================
Attr_1Floor:
   Attr1:
      name: Attr1
      x: 5
      y: 15
      w: 400
      h: 250
   Attr2:
      name: Attr2
      x: 5
      y: 15
      w: 400
      h: 250
================================
Floor2:
   Attr1:
      name: Attr1
      x: 5
      y: 15
      w: 400
      h: 25
   Attr2:
      name: Attr2
      x: 5
      y: 15
      w: 400
      h: 25
================================
请按任意键继续. . .

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值