Разбор 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