Сохраняет ли boost :: property_tree :: xml_parser :: read_ xml порядок? - PullRequest
0 голосов
/ 27 февраля 2020

Учитывая следующий элемент xml:

<elem>
    <sub_elem name="first">
    <sub_elem name="second">
</elem>

Относительно дерева свойств, заполненного boost :: property_tree :: xml_parser :: read_ xml, гарантируется, что sub_elem «first» будет before sub_elem "second"?

Документация гласит:

Считывает XML из входного потока и переводит в свойство дерево.

Однако все зависит от того, что именно означает «перевод».

1 Ответ

1 голос
/ 27 февраля 2020

Из документации по дереву свойств: https://www.boost.org/doc/libs/1_65_1/doc/html/property_tree/container.html Я считаю, что порядок элементов в файле XML сохраняется

Очень важно помнить, что последовательность свойств не заказан ключом. Сохраняет порядок вставки . Это очень похоже на std :: list. Быстрый доступ к детям по имени обеспечивается через отдельную структуру поиска. Не пытайтесь использовать алгоритмы, которые ожидают упорядоченную последовательность (например, binary_search) для дочерних узлов.

Глядя на внутренний код в https://www.boost.org/doc/libs/1_51_0/boost/property_tree/detail/xml_parser_read_rapidxml.hpp, можно увидеть обход узлов и push_back звонки. Это действительно должно работать в самом простом способе сохранения порядка.

...