Разбор XML-файла в cprogram для определенного элемента

В настоящее время я работаю в разборе XML с C и C++

я использую библиотеку pugixml в C++ и библиотеку libxml2 в c для разбора xml

Предположим, у меня есть корневой элемент в XML как "конфигурации", и у него есть 4 дочерних элемента, которые являются версии протокола, имя сервера, Daqlist и устройства.

Теперь я могу получить корневой элемент (конфигурацию), используя этот корень, я хочу переместить его конкретный дочерний элемент (устройство), не перемещая один за другим.

В C++ с помощью pugixml у нас есть следующая строка для прямого перехода от конфигурации к дочернему устройству, doc.child ("Конфигурация"). Child ("устройство").

В c, используя libxml, я просто перемещаю одного за другим потомка, как, если cur узел является корневым (конфигурация), то я использую, cur = cur-> children-> next-> next-> next-> next-> next-> следующая-> следующая-> следующая-> следующая (для перехода на устройство из конфига)

я не хочу переходить на следующий следующий... я хочу, чтобы простая функция для перехода от текущего к конкретному узлу в c с помощью libxml.. кто-нибудь может помочь решить эту проблему..?

1 ответ

->next->next... Подход предполагает фиксированное расположение узлов и является ненадежным. Я бы посоветовал вам:

  • итерируйте детей, пока не найдете
    • child->type == XML_ELEMENT_NODE а также
    • strcmp((char *)child->name, "device") == 0
    • или же xmlStrcmp(child->name, BAD_CAST "device") == 0
  • используйте XPath для поиска подходящих узлов /configuration/device
Другие вопросы по тегам