Squeak.ru - шаблоны программирования

Простой синтаксический анализ С++ с помощью boost xml с деревом свойств

У меня есть этот вопрос о парсинге boost xml:

вот кусок моего Xml:

<Clients>
  <Client name="Alfred" />
  <Client name="Thomas" />
  <Client name="Mark" />
</Clients>

и я прочитал имя с этим кодом:

std::string name = pt.get<std::string>("Clients.Client.<xmlattr>.name, "No name");

и работает нормально, но всегда извлекает первый узел.

Есть ли способ получить второй, третий узел без цикла?

спасибо


Ответы:


1

В дереве свойств нет возможности запрашивать многозначные ключи. (Отчасти потому, что большинство поддерживаемых серверных форматов официально не поддерживают дубликаты ключей).

Однако вы можете перебирать дочерние элементы, поэтому вы можете реализовать свой собственный запрос, например:

for (auto& child : pt.get_child("Clients"))
    if (child.first == "Client")
        std::cout << child.second.get<std::string>("<xmlattr>.name", "No name") << "\n";

См. полностью рабочий образец Live On Coliru:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <sstream>
#include <iostream>

using boost::property_tree::ptree;

int main()
{
    std::stringstream ss("<Clients>\n"
        "  <Client name=\"Alfred\" />\n"
        "  <Client name=\"Thomas\" />\n"
        "  <Client name=\"Mark\" />\n"
        "</Clients>");

    ptree pt;
    boost::property_tree::read_xml(ss, pt);

    for (auto& child : pt.get_child("Clients"))
    {
        if (child.first == "Client")
            std::cout << child.second.get<std::string>("<xmlattr>.name", "No name") << "\n";
    }
};
14.10.2014
  • Могу я попросить вас исправить гиперссылку? Я не могу получить доступ и хотел бы увидеть содержимое. Заранее спасибо! 15.10.2014
  • @IdusOrtus Ссылка у меня работает. Можешь попробовать еще раз? 15.10.2014
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...