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

в настоящее время я работаю над синтаксическим анализом xml на c и c ++

Я использую библиотеку pugixml в c ++ и библиотеку libxml2 в c для синтаксического анализа xml

Предположим, у меня есть корневой элемент в xml как «конфигурация», и у него есть 4 дочерних элемента: версия протокола, имя сервера, список daqlist и устройство.

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

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

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

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


person Muthu Selvam    schedule 06.12.2018    source источник


Ответы (1)


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

  • iterate the children until you find one with
    • child->type == XML_ELEMENT_NODE and
    • strcmp((char *)child->name, "device") == 0
    • or xmlStrcmp(child->name, BAD_CAST "device") == 0
  • используйте XPath, чтобы найти узлы, соответствующие /configuration/device
person nwellnhof    schedule 06.12.2018
comment
У меня был поиск в xpath, но я не знаю, чем это полезно для меня, когда я пытаюсь снимать фильм с родительского узла (Конфигурация) на его конкретное дочернее устройство node (), не перемещая одного за другим. Не могли бы вы рассказать мне, как использовать xpath для этого .. с маленьким примером .. ?? - person Muthu Selvam; 07.12.2018