2012-02-27 2 views
8

C++ 프로그램에서 XML 파일을 읽으려고합니다. 내가 XML 파일을보고 다음과 같이 읽어보십시오 지금C++ 프로그램에서 XML 파일 읽기

<?xml version="1.0" encoding="utf-8"?> 
<myprogram> 
<configuration> 
<window> 
<height> 300 </height> 
<width> 500 </width> 
</window> 
</configuration> 
</myprogram> 

: 정말 일반적으로

ifstream in("mydata.xml"); 

//ignore the <?xml line 
in.ignore(200, '\n'); 

//i know that the first value i want is the window height so i can ignore <myprogram> <configuration> and <window> 

//ignore <myprogram> 
in.ignore(200, '\n'); 

//ignore <configuration> 
in.ignore(200, '\n'); 

//ignore <window> 
in.ignore(200, '\n'); 

string s; int height; 

//okay, now i have my height 
in >> s >> height; 

이 나쁜 생각처럼 보인다 XML 파일은 다음과 같이 보입니다 XML 파일을 수정하는 방법을 제한합니다. 위의 해결 방법은 매우 수동적이며 XML의 내용이 변경되면 XML을 읽는 전체 방법을 변경해야하는 것으로 보입니다.

더 좋은 방법이 있나요?

+0

나는 C++을 사용하지 않았다. 그래서 나는 C++을위한 하나의 이름을 모르지만 xml 파서를 google에 넣었다. 나는 당신이 뭔가를 찾을 것이라고 확신한다. – Dan675

답변

6

당신은 당신을 위해 그것을 할 몇 가지 라이브러리를 사용할 수를 구문 분석 기능을 가지고 POCO 라이브러리를 사용할 수 있습니다. Windows 플랫폼에서 작업하는 경우 이미 시스템의 일부인 MSXML을 사용할 수 있습니다.

확인이 질문 : Read Write XML File In C++

다른 인기 라이브러리 : , 속성 트리가 XML을 아주 잘 작동 ,

+0

MSXML이 내가 원하는 것일 수도 있습니다. Windows 프로그램이므로 먼저 시도해 보겠습니다. 팁 고마워. – user974967

+1

종속성이없는 헤더 전용 라이브러리이므로 RapidXml에 대한 투표. –

0

당신은 XML

2

부스트, 나는 그것을 사용할 수 있습니다.

+0

Boost가 속성 트리에 사용하는 RapidXml 라이브러리를 많이 얻지는 않는다고 생각합니다. 이미 Boost를 사용하고 있지 않다면, 단일 헤더 파일 (RapidXml) 대신 큰 의존성이 추가됩니다. –

+0

실제로 모든 사람들이 이미 사용하고있는 라이브러리와 플랫폼 간 호환성이 필요한지 여부에 따라 달라집니다. – ikku100

1

멀티 플랫폼 소스에서 나는 보통 Qt XML 리더를 사용합니다.

당신이 읽을 수있는 3 가지 방법이 있습니다

  1. Qt core QXmlStreamReader - XML ​​읽기의 Qt는 방법
  2. SAX2 reader-내용이 클래스
  3. 을 처리 표준 SAX2 리더
  4. DOM reader - XML ​​노드
  5. 을 가진 DOM 문서 리더

Windows 전용 소프트웨어를 작성하는 경우 MSXML 6을 사용해야합니다. Windows XP SP3 MSXML 6.0은 OS의 일부이므로

Linux의 경우 libxml2을 사용해야합니다.

+0

C++ 라이브러리를 가지고있을 때 C XML 라이브러리로 해결해야하는 이유는 무엇입니까? – pmr

+0

@pmr : 왜 안 되니? 많은 경우 순수한 C 라이브러리가 더 빠릅니다. libxml2는 일반적으로 사용되며 대개 컴퓨터에 있으므로 더 의존하지는 않습니다. – Naszta

+0

제 경험으로 볼 때 C 라이브러리는 관용적 인 C++에서 이상하게 느껴지고 랩핑이 필요하고 다른 코드와 큰 코드베이스와 너무 잘 통합되지 않습니다. 그러나 그것은 아마도 매우 주관적입니다. – pmr

1

XML 파서가 필요합니다. 무리가 거기에 있습니다 : 이미 Qt를를 사용하는 경우에만

  • TinyXML
  • pugiXML
  • POCO뿐만 아니라 XML 파서 (그리고 더 많은)에
  • QtXml 제공

    개인적인 취향은 pugiXML이지만 개인 취향의 문제입니다.