У меня XML-файл может содержать тысячи узлов, как показано ниже.Как найти узел в файле XML наиболее эффективно (C++)?
<?xml version="1.0" encoding="utf-8"?>
<root>
<node>
<id>0</id>
<value>data</value>
</node>
<node>
<id>1</id>
<value>data</value>
</node>
<node>
<id>2</id>
<value>data</value>
</node>
</<root>
Каждый узел имеет свой «идентификатор», который гарантирует быть не дублируется друг с другом и, возможно, есть промежутки между ними. Мой вопрос - это самый эффективный способ, используя boost для поиска определенного узла с помощью идентификатора узла?
Спасибо.
UPDATE Это способ, которым я сделал
property_tree::wptree ptree; // has been loaded somewhere
auto nodes = ptree.get_child(L"root");
bool bFound = false;
for (auto& itr : nodes)
{
auto & rec = itr.second;
int id = rec.get<int>(L"id", -1);
if (id == nodeId)
{
bFound = true;
// found it
// get other values
break;
}
}
Я не думаю, что сканирование всего файла, чтобы найти элемент является эффективным.
Пожалуйста, после того, что вы пробовали до сих пор (C++ код) и объяснить почему он не «эффективен». –
@JimGarrison Конечно, я сделал это, прежде чем задавать вопрос здесь. Вам не нужно голосовать только потому, что кто-то не проявил тривиальности в своем вопросе. –
В зависимости от размера вашего XML у вас может не быть выбора. Например. на нашем месте мы сталкиваемся с многогигабайтными XML-файлами, и вы просто не можете позволить себе держать их в памяти. – sehe