読者です 読者をやめる 読者になる 読者になる

StreamingMarkupBuilderでXML宣言を出力(補足)

dev groovy

groovy.xml.StreamingMarkupBuilderのソースを見ると、"mkp."の後にはyield/yieldUnescaped/xmlDeclaration/comment/piが使えることが分かります。さらに、StreamingMarkupBuilderはgroovy.xml.streamingmarkupsupport.AbstractStreamingBuilderを継承しているので、そこで定義されているdeclareNamespace/declareAlias/getNamespacesも使えるわけです。
mkp.xmlDeclaration()でXML宣言が出力されるからくりですが、"mkp."の部分は本来declareNamespaceでXML名前空間を指定するために使われる表記法なのですが、あらかじめ特殊な名前空間を予約しておくことでBuilder自身に指示を与える特殊な「タグ」を定義可能にしているのです。ちなみに、groovy.xml.streamingmarkupsupport.BaseMarkupBuilderを見ると、

namespaces.put("mkp", "http://www.codehaus.org/Groovy/markup/keywords");   // pseudo namespace for markup keywords

と定義されていました。
この"mkp."、Groovy-1.6.4ではStreamingMarkupBuilderのJavaDocに何も記述がなかったのですが、最新のtrunkではサンプルコードが追記されたみたいです。(苦情きたのかな・・・)
http://svn.codehaus.org/groovy/trunk/groovy/groovy-core/src/main/groovy/xml/StreamingMarkupBuilder.groovy