개발 라이브러리 & 툴

C++ boost property_tree를 이용한 간단한 xml 파싱 예제

하늘흐늘 2021. 10. 14. 18:34
반응형

C/C++에서 json을 사용하려고 boost property_tree를 사용하다가 이 클래스가 xml파싱에도 거의 동일한 인터페이스로 사용할 수 있다는 것을 알게 되었습니다. 아래 예는 간단한 boost property_tree를 이용한 xml 파싱 예입니다. 참고로 소스 중 read_xml에서 iss(istringstream) 대신에 문자열을 넣으면 파일에서 읽게 됩니다. 

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <iostream>
#include <sstream>
#include <string>


using namespace std;
using namespace boost::property_tree;


int main(int argc, char* argv[])
{
	string data =
		"<? xml version=\"1.0\" encoding=\"utf-8\"?>"
		"<root>"
		"	<str>Hello</str>"
		"	<values>"
		"		<value>1</value>"
		"		<value test=\"A\">2</value>"
		"		<value>3</value>"
		"	</values>"
		"</root>";


	istringstream iss(data);
	ptree pt;
	read_xml(iss, pt);

	auto str = pt.get<string>("root.str");
	cout << str << endl;

	auto childs = pt.get_child("root.values");
	for (auto& child : childs)
	{
		cout << child.first << " : " << child.second.get_value<string>() << endl;
		if (0 < child.second.size())
		{
			cout << child.second.get_child("<xmlattr>.test").get_value<string>() << endl;
		}
	}

	return 0;
}

실행 결과는 아래와 같습니다.

Hello
value : 1
value : 2
A
value : 3
반응형