2010-10-01 30 views
6

Tôi đã đăng một question trên diễn đàn DOxygen và cũng đang đăng nó ở đây để có phản hồi tốt hơn.Trích xuất danh sách cuộc gọi chức năng từ Đầu ra XML DOxygen

Tôi có một dự án C có kích thước vừa phải với khoảng 2.900 chức năng. Tôi đang sử dụng DOxygen 1.5.9 và nó tạo thành công một biểu đồ cuộc gọi cho các chức năng. Có cách nào để trích xuất này ra để phân tích thêm? Danh sách được ghép nối đơn giản sẽ là đủ, ví dụ:

Caller,Callee 
FunctionX, FunctionY 
... 

Tôi thấy thoải mái với XSLT nhưng tôi phải nói rằng đầu ra XML DOxygen phức tạp. Có ai đã làm điều này trước đây và có thể cung cấp một số hướng dẫn về cách phân tích các tệp XML không?

Cảm ơn trước!

+0

Bạn có muốn sử dụng XSLT cụ thể hay bạn đang mã hóa cho bất kỳ ngôn ngữ nào khác như C hoặc C#? Ngoài ra, bạn nên đăng một mẫu đầu ra XML Doxygen ở đây nếu bạn muốn nhận được các đề xuất chính xác hơn. – Reinderien

+0

Không cần thiết phải sử dụng XSLT; Tôi có thể sử dụng cái gì khác. Câu hỏi không thực sự là cách phân tích cú pháp XML - tôi biết cách làm điều đó. Nó cơ bản hơn - DOxygen tổ chức các tệp đầu ra XML (nhiều) của nó như thế nào và làm thế nào tôi có thể thiết lập mối quan hệ người gọi - callee từ chúng. –

Trả lời

4

Dựa trên những gì tôi nhìn thấy trong ví dụ contrived mà tôi tạo ra,

  • file Parse với một tên tương tự như ^_(.+)\d+(c|cpp|h|hpp)\.xml$, nếu tôi regex-foo là đúng.
  • Tìm tất cả <memberdef kind="function">. Nó có thuộc tính id duy nhất. Tôi tin rằng XPath cho điều này là //memberdef[@kind='function'].
  • Trong phần tử đó, hãy tìm tất cả <references>.
  • Đối với mỗi thẻ đó, thuộc tính refid chỉ đề cập đến thuộc tính id của số <memberdef> tương ứng đang được gọi.
  • Nút văn bản trong mỗi <references> tương ứng với số <name> của số <memberdef> tương ứng đang được gọi.

Điều này có vẻ như một cách đơn giản, dễ hiểu để thể hiện biểu đồ cuộc gọi. Bạn sẽ không gặp khó khăn khi sử dụng XSLT hoặc bất kỳ bộ phân tích cú pháp XML nào khác để có được kết quả mong muốn.

Các vấn đề liên quan