我正在寻找使用pugixml(版本1.6)替换节点pcdata的优雅解决方案。例如,迭代一个节点集并将子值更新为某些东西。
pugi::xpath_node_set nodes = document.select_nodes("//a");
for (auto it = nodes.begin(); it != nodes.end(); it++)
{
std::cout << "before : " << it->node().child_value() << std::endl;
// SOME REPLACE GOES HERE
std::cout << "after : " << it->node().child_value() << std::endl;
}
我使用过:
it->node().append_child(pugi::node_pcdata).set_value("foo");
但顾名思义它只是附加数据但我找不到任何功能:
it->node().remove_child(pugi::node_pcdata);
另一个注意事项是节点上的属性很重要,应保持不变。
感谢您的帮助。
答案 0 :(得分:4)
xml_text对象是为此目的而创建的(其中包括):
std::cout << "before : " << it->node().child_value() << std::endl;
it->node().text().set("contents");
std::cout << "after : " << it->node().child_value() << std::endl;
请注意,您也可以使用text()而不是child_value(),例如:
xml_text text = it->node().text();
std::cout << "before : " << text.get() << std::endl;
text.set("contents");
std::cout << "after : " << text.get() << std::endl;
此页面包含更多详细信息:http://pugixml.org/docs/manual.html#access.text