Я хочу добавить атрибуты к каждому узлу, найденному в корневом теге в итераторе, и я хочу, чтобы атрибут был 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);
}
Учитывая, что я не слишком озабочен использованием памяти, как я могу гарантировать, что каждое добавленное значение атрибута уникально?
c++,c++11,rapidxml,