2010-10-01 6 views
6

Wysłałem question na forach DOXygen, a także zamieszczam tutaj, aby uzyskać lepszą odpowiedź.Wyodrębnianie listy wywołań funkcji z DOXygen XML Output

Mam projekt średniej wielkości C około 2900 funkcji. Używam DOxygen 1.5.9 i pomyślnie generuję wykres wywołań dla funkcji. Czy istnieje sposób na wyciągnięcie tego do dalszej analizy? Wystarczy jedna sparowana lista, np.

Caller,Callee 
FunctionX, FunctionY 
... 

Jestem zadowolony z XSLT, ale muszę powiedzieć, że wyjście DOXygen XML jest złożone. Czy ktokolwiek wcześniej to zrobił i może dostarczyć wskazówek, jak parsować pliki XML?

Z góry dziękuję!

+0

Czy chcesz używać XSLT specjalnie, czy też kodujesz inny język jak C lub C#? Ponadto, jeśli chcesz otrzymywać dokładniejsze sugestie, powinieneś opublikować próbkę wyjściowego pliku Doxygen XML. – Reinderien

+0

Nie trzeba używać XSLT; Mógłbym użyć czegoś innego. Nie chodzi o to, jak parsować XML - wiem, jak to zrobić. Jest bardziej podstawowy - w jaki sposób DOxygen organizuje swoje (wiele) pliki wyjściowe XML i jak mogę ustanowić od nich wywołanie - relację z odbiorcą. –

Odpowiedz

4

Na podstawie tego, co widzę w contrived przykład, który został utworzony,

  • pliki analizowania o nazwie podobnej do ^_(.+)\d+(c|cpp|h|hpp)\.xml$, jeśli mój regex-foo ma rację.
  • Znajdź wszystkie <memberdef kind="function">. Ma unikalny atrybut id. Wierzę, że XPath dla tego jest //memberdef[@kind='function'].
  • Wewnątrz tego elementu znajdź wszystkie <references>.
  • Dla każdego z tych tagów atrybut refid jednoznacznie odnosi się do atrybutu id odpowiedniego <memberdef>, który jest wywoływany.
  • Węzeł tekstu w każdej <references> odpowiada <name> odpowiedniego <memberdef> która jest wywołana.

Wydaje się to być miłym, prostym sposobem wyrażania wykresów połączeń. Nie powinieneś mieć problemów z używaniem XSLT lub innego rozsądnego pakietu XML-parsing, aby uzyskać pożądane rezultaty.

Powiązane problemy