<?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 文档,它用相同的关键字描述了 2 种类型的航班。子字段取决于航班的类型。我必须根据航班类型读取 XML 并将其存储到 C++ 数据类中。
这是我用于此目的的代码段。
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
只获取值“carrier”、“number”和“value”。我很惊讶,因为这些是酋长国航班类型的参数。我无法收到国泰航空的航班信息。请帮我找出问题所在。我真的很想从这个 XML 文件中获取国泰航空航班的信息并存储到 C++ 数据类中。我应该怎么做才能纠正这个?
注意:BOOST_FOREACH
我尝试了而不是 second ,v.second.get_child("flight");
但它引发了异常。然后我将上面的替换v.second.get_child("flight_class");
为它的子字段,例如:类型和票价。这可能是什么原因?似乎它正在返回其孙节点。