Извлечение списка вызовов функций из вывода DOxygen XML - PullRequest
6 голосов
/ 02 октября 2010

Я разместил вопрос на форумах DOxygen, а также публикую его здесь для лучшего ответа.

У меня умеренный C-проект с примерно 2900 функциями. Я использую DOxygen 1.5.9, и он успешно генерирует граф вызовов для функций. Есть ли способ извлечь это для дальнейшего анализа? Было бы достаточно простого парного списка, например,

Caller,Callee
FunctionX, FunctionY
...

Мне комфортно с XSLT, но я должен сказать, что вывод XML DOxygen сложный. Кто-нибудь делал это раньше и может дать некоторые рекомендации о том, как анализировать файлы XML?

Заранее спасибо!

1 Ответ

4 голосов
/ 03 октября 2010

На основании того, что я вижу в надуманном примере, который я создал,

  • Анализ файлов с именем, похожим на ^_(.+)\d+(c|cpp|h|hpp)\.xml$, если мой regex-foo правильный.
  • Найти все <memberdef kind="function">. Он имеет уникальный атрибут id. Я полагаю, что XPath для этого //memberdef[@kind='function'].
  • Внутри этого элемента найдите все <references>.
  • Для каждого из этих тегов атрибут refid однозначно ссылается на атрибут id соответствующего вызываемого <memberdef>.
  • Текстовый узел в каждом <references> соответствует <name> соответствующего <memberdef>, который вызывается.

Это выглядит как хороший, простой способ выразить графы вызовов. У вас не должно возникнуть проблем с использованием XSLT или любого другого разумного пакета XML-анализа для получения желаемых результатов.

...