Разбор XML-файла в cprogram для определенного элемента - PullRequest
0 голосов
/ 06 декабря 2018

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 06 декабря 2018

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

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