Как заменить узлы pcdata или текст с помощью pugixml

Я ищу элегантное решение для замены pcdata узлов с помощью pugixml (версия 1.6). Например, перебирая набор узлов и обновляя дочернее значение до чего-либо.

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);

Еще одно замечание: атрибуты узла важны и должны оставаться неизменными.

Спасибо за вашу помощь.


person user3102241    schedule 11.06.2015    source источник
comment
Вы имеете в виду, что хотите удалить node_pcdata или изменить его значение?   -  person Carlton    schedule 11.06.2015
comment
@Carlton Я хочу изменить его значение, но, поскольку я не смог найти ничего похожего на replace_child, я решил удалить_child, а затем append_child, если это неясно, я отредактирую вопрос, но ответ, который дал мне zeuxcg, правильный.   -  person user3102241    schedule 12.06.2015


Ответы (1)


Для этой цели (среди прочего) создан объект 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

person zeuxcg    schedule 12.06.2015
comment
Большое спасибо, это было именно то, что я искал, должно быть, пропустил часть text() документации. - person user3102241; 12.06.2015