【问题标题】:Extract all nodes of a node in an XML file by Pugixml C++通过 Pugixml C++ 提取 XML 文件中节点的所有节点
【发布时间】:2017-04-27 09:27:56
【问题描述】:

我有一个具有以下结构的 XML 文件:

<Employee>
    <Address>
        <Name>XYZ</CustomerName>
        <Street>street no. 1</Street>
        <City>current city</City>
        <Country>country</Country>
    </Address>
</Employee>

我想提取节点 Address 的所有节点的值,并将这些值存储在字符串向量中(即std::vector&lt;std::string&gt; EmployeeAdressDetails)。

如何才能在循环中提取节点而不是逐个提取值?

更新:“逐个提取”是指如下内容:

xml_node root_node = doc.child("Employee");
xml_node Address_node = root_node.child("Address");
xml_node Name_node = Address_node .child("Name");
xml_node Street_node = Address_node .child("Street");
xml_node City_node = Address_node .child("City");
xml_node Country_node = Address_node .child("Country");

【问题讨论】:

  • 循环提取节点不是“一一提取”吗?你能解释一下两者之间的区别吗?我不太清楚你的意思。
  • @Borgleader:我已经更新了我的问题,以澄清“逐个提取”是什么意思。请看一看。

标签: c++ xml-parsing pugixml


【解决方案1】:

你可以这样做:

for(auto node: doc.child("Employee").child("Address").children())
{
    std::cout << node.name() << ": " << node.text().as_string() << '\n';
}

或者对于 C++11 之前的编译器:

pugi::xml_object_range<pugi::xml_node_iterator> nodes = doc.child("Employee").child("Address").children();

for(pugi::xml_node_iterator node = nodes.begin(); node != nodes.end(); ++node)
{
    std::cout << node->name() << ": " << node->text().as_string() << '\n';
}

输出:

Name: XYZ
Street: street no. 1
City: current city
Country: country

【讨论】:

  • for(auto node: doc.child("Employee").child("Address").children()) 根据我的 IDE 存在语法问题。
  • 您使用的是支持 C++11 的编译器吗?
  • 不...我将auto 替换为xml_node,但我不知道其余的语法
  • 你需要使用常规的 for 循环。如果.childen() 返回一个向量或其他容器,我不会感到惊讶,所以只需获取对它的引用并像往常一样执行常规 for 循环。或者考虑升级你的编译器(如果可能的话)。
  • @skm 我为旧编译器添加了另一种语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多