2010-10-01 106 views
6

我在DOxygen論壇上發佈了一個question,並且在這裏發佈它以獲得更好的響應。從DOxygen XML輸出中提取函數調用列表

我有一箇中等大小的C項目約2,900個功能。我正在使用DOxygen 1.5.9,它正在成功生成函數的調用圖。有沒有辦法提取出來進行進一步分析?簡單的配對列表就足夠了,例如,

Caller,Callee 
FunctionX, FunctionY 
... 

我很喜歡XSLT,但我必須說DOxygen XML輸出很複雜。有沒有人以前做過這件事,並可以提供一些關於如何解析XML文件的指導?

在此先感謝!

+0

你想專門使用XSLT嗎?還是你正在編寫任何其他語言如C或C#?另外,如果您希望得到更準確的建議,則應在此處發佈Doxygen XML輸出的示例。 – Reinderien 2010-10-01 20:43:20

+0

不需要使用XSLT;我可以使用別的東西。問題不在於如何解析XML - 我知道如何解決這個問題。它更基本 - DOxygen如何組織其(多個)XML輸出文件,以及如何從它們建立主叫方 - 被叫方關係。 – 2010-10-02 19:27:19

回答

4

基於我在我創建了人爲的例子看,

  • 解析文件類似於^_(.+)\d+(c|cpp|h|hpp)\.xml$一個名字,如果我正則表達式,foo是正確的。
  • 查找所有<memberdef kind="function">。它有一個獨特的id屬性。我相信這個XPath是//memberdef[@kind='function']
  • 在那個元素中,找到全部<references>
  • 對於這些標記中的每一個,refid屬性唯一地指代正在調用的相應<memberdef>id屬性。
  • 每個<references>中的文本節點對應於正在調用的相應<memberdef><name>

這似乎是一個很好,直接的方式來表示調用圖。使用XSLT或任何其他理智的XML解析套件來獲得所需結果應該沒有問題。