<?xml version="1.0"?>
<sked>
<version>2</version>
<flight xmlns:xsi="some_uri" xsi:type="emirates">
<carrier>BA</carrier>
<number>4001</number>
<date>2011-07-21</date>
</flight>
<flight xmlns:xsi="some_uri" xsi:type="cathey-pacific">
<flight_class>
<type>Economy</type>
<fare>400</fare>
</flight_class>
<date>2011-07-21</date>
</flight>
</sked>
동일한 키워드로 두 가지 유형의 비행을 설명하는 XML 문서가 있습니다. 하위 입력란은 항공편 유형에 따라 다릅니다. XML 형식을 읽고 비행 유형에 따라 C++ 데이터 클래스에 저장해야합니다.C++에서 boost :: property_tree 라이브러리 함수를 사용하여 XML 데이터 읽기
이것은이 목적으로 사용되는 코드 세그먼트입니다.
typedef boost::property_tree::ptree Node;
Node pt;
read_xml(test.xml, pt);
Node skedNode = pt.get_child("sked");
Node flightNode = skedNode.get_child("flight");
BOOST_FOREACH(Node::value_type const& v, skedNode.get_child("sked"))
{
if (v.first == "flight")
{
if (v.second.get("<xmlattr>.xsi:type", "Null") == "cathey-pacific")
{
BOOST_FOREACH(Node::value_type const& v1, flightNode.get_child("flight"))
{
if(v1.first == "flight_class")
FlightClass fclass = FlightClass(static_cast<Node>(flightNode));
}
}
}
}
위 코드를 실행하려고하면 아무 것도 안됩니다. FlightClass
. 위의 코드를 디버그 하려다가 v1.first
값이 "이동 통신사", "번호"및 "값"으로만 나타납니다. 나는 에미레이트 항공기의 매개 변수이기 때문에 놀랐습니다. 나는 카 티픽 - 태평양 비행 정보를받을 수 없었습니다. 문제의 해결 방법을 알려주십시오. 저는이 XML 파일에서 cathy-pacific 항공편에 대한 정보를 얻고 C++ 데이터 클래스에 저장하려고합니다. 이 문제를 해결하려면 어떻게해야합니까?
참고 : 두 번째 BOOST_FOREACH
대신에 v.second.get_child("flight");
을 시도했지만 예외가 발생했습니다. 그런 다음 위의 내용을 v.second.get_child("flight_class");
으로 바꿔서 유형 및 요금과 같은 하위 필드를 제공합니다. 그 이유는 무엇일까요? 그것은 손자 노드를 반환하는 것 같습니다.