girファイルの解析xsltproc編
girファイルをxsltprocで読みやすくしたいと思います。と言っても、今回はとっかかりだけです。
$ xsltproc -o Gtk-2.0.html gir01.xsl /usr/share/gir-1.0/Gtk-2.0.gir
これで/usr/share/Gtk-2.0.girをhtml形式に変換します。すべてのtagを解析するのは面倒なので、とりあえず
変換で利用したgir01.xslファイルは以下の通りです。
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gir="http://www.gtk.org/introspection/core/1.0" version="1.0"> <xsl:output method="html"/> <xsl:template match="gir:repository"> <html> <body> <ul> <xsl:apply-templates select="gir:include"/> </ul> </body> </html> </xsl:template> <xsl:template match="gir:include"> <li> <xsl:value-of select="@name"/> version=<xsl:value-of select="@version"/> </li> </xsl:template> </xsl:stylesheet>
今回はまったのは、xmlファイルでxmlnsというxmlのnamespaceを使っている場合に度のようにしてmatchさせるか知らなかったことから、
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gir="http://www.gtk.org/introspection/core/1.0" version="1.0">
この部分で、Gtk-2.0.girの最初にある、
<repository version="1.0" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
これのxmlnsに対応できます。そして、template matchには、
ちなみに、上記でできるhtml形式は以下のようになります。
<html xmlns:gir="http://www.gtk.org/introspection/core/1.0"><body><ul> <li>Atk version=1.0</li> <li>GLib version=2.0</li> <li>GModule version=2.0</li> <li>GObject version=2.0</li> <li>Gdk version=2.0</li> <li>GdkPixbuf version=2.0</li> <li>Gio version=2.0</li> <li>Pango version=1.0</li> <li>cairo version=1.0</li> </ul></body></html>
girファイルは階層が深く、要素もたくさんあり、textじゃなくてattributeにすべてが書かれているため、@を多用することになりますが、多分なんとかなるんじゃないかな?と思っています。
まあ、Gtk-2.0.girは