2010-10-01 8 views
6

Publiqué un question en los foros de DOxygen y también lo publico aquí para una mejor respuesta.Extrayendo la lista de llamadas de funciones de DOxygen XML Output

Tengo un proyecto de tamaño moderado C de aproximadamente 2,900 funciones. Estoy usando DOxygen 1.5.9 y está generando con éxito un gráfico de llamadas para las funciones. ¿Hay alguna forma de extraer esto para un análisis posterior? Una simple lista de pares sería suficiente, p.

Caller,Callee 
FunctionX, FunctionY 
... 

Me siento cómodo con XSLT pero debo decir que la salida XML de DOxygen es compleja. ¿Alguien ha hecho esto antes y puede proporcionar alguna guía sobre cómo analizar los archivos XML?

¡Gracias de antemano!

+0

¿Desea usar XSLT específicamente o está codificando para otro idioma como C o C#? Además, debe publicar una muestra del resultado XML de Doxygen aquí si desea recibir sugerencias más precisas. – Reinderien

+0

No es necesario usar XSLT; Podría usar algo más. La pregunta no es realmente acerca de cómo analizar XML: sé cómo hacerlo. Es más básico: ¿cómo organiza DOxygen sus (muchos) archivos de salida XML y cómo puedo establecer la relación de llamada y llamada entre ellos? –

Respuesta

4

Sobre la base de lo que veo en el ejemplo artificioso que creé,

  • archivos Parse con un nombre similar al ^_(.+)\d+(c|cpp|h|hpp)\.xml$, si mi expresión regular-foo es correcto.
  • Buscar todos <memberdef kind="function">. Tiene un atributo único id. Creo que el XPath para esto es //memberdef[@kind='function'].
  • Dentro de ese elemento, encuentre todos <references>.
  • Para cada una de esas etiquetas, el atributo refid se refiere únicamente al atributo id del correspondiente <memberdef> que se está llamando.
  • El nodo de texto dentro de cada <references> corresponde al del correspondiente <memberdef> que se está llamando.

Esto parece una forma sencilla y directa de expresar gráficos de llamadas. No debería tener problemas para usar XSLT o cualquier otro paquete de análisis de lenguaje inteligente para obtener los resultados deseados.

Cuestiones relacionadas