Я хочу добавить атрибуты к каждому узлу, найденному в корневом теге в итераторе, и я хочу, чтобы атрибут был id
с присвоенными им индексами. Вот блок кода, используемый для перебора дочерних узлов, выделения и добавления каждого атрибута к каждому узлу:
for (xml_node<>* node = root->first_node("lang")->first_node("strings")->first_node();
node; node = node->next_sibling())
{
node->append_attribute(
document.allocate_attribute(
"id", (std::to_string(index)).c_str()
)
);
index += 1;
}
После проверки кажется, что document.allocate_attribute
не создает новый указатель, как я ожидал, поскольку большинство атрибутов id
в выводе XML, созданном моей функцией print_document
, показывают в основном повторяющиеся значения, т.е.:
<translations>
<lang>
<strings>
...
<s id="895">string1</s>
<s id="895">string2</s>
<s id="895">string3</s>
...
</strings>
</lang>
</translations>
print_document
это просто:
void print_document(xml_document<> &document)
{
rapidxml::print(std::cout, document, 0);
}
Учитывая, что я не слишком озабочен использованием памяти, как я могу гарантировать уникальность каждого добавленного значения атрибута?