雑誌ネタにと、groovyをいじってみました(groovy-1.0-beta-9)。次のようなXHTMLインスタンスをMarkupBuilderで出力しましょう。
これは手書きのお手本:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>hello</title>
</head>
<body style="color:blue">
<p>Hello, world.</p>
</body>
</html>
こんなgroovyコードで:
import groovy.xml.MarkupBuilder
import java.io.PrintWriterxml = new MarkupBuilder(new PrintWriter(System.out))
xml.html(xmlns: "http://www.w3.org/1999/xhtml") {
head() {
title("hello")
}
body(style: "color:blue") {
p("Hello, world.")
}
}
println() // 単なる整形用
出力はこうなる:
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title>hello</title>
</head>
<body style='color:blue'>
<p>Hello, world.</p>
</body>
</html>
ここまではいいのだけど、要素pを混合内容(mixed content; mixture)としたいときはどうするのだろう?
これは手書きのお手本:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>hello</title>
</head>
<body style="color:blue">
<p>Hello,<br/> world.</p>
</body>
</html>
問題は、pのなかに入り込んだbrタグ。これでテキストが分割される。
たとえばこんなgroovyコードを書いてみると:
import groovy.xml.MarkupBuilder
import java.io.PrintWriterxml = new MarkupBuilder(new PrintWriter(System.out))
xml.html(xmlns: "http://www.w3.org/1999/xhtml") {
head() {
title("hello")
}
body(style: "color:blue") {
p() {
"Hello,"
br()
"world."
}
}
}
println() // 単なる整形用
案の定、ダメだわな:
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title>hello</title>
</head>
<body style='color:blue'>
<p>
<br />
</p>
</body>
</html>
よくわからんが、エーイッ、こんなんはどうだ!:
import groovy.xml.MarkupBuilder
import java.io.PrintWriterxml = new MarkupBuilder(new PrintWriter(System.out))
xml.html(xmlns: "http://www.w3.org/1999/xhtml") {
head() {
title("hello")
}
body(style: "color:blue") {
p() {
_("Hello,")
br()
_("world.")
}
}
}
println() // 単なる整形用
やっぱりダメか:
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<title>hello</title>
</head>
<body style='color:blue'>
<p>
<>Hello,</>
<br />
<>world.</>
</p>
</body>
</html>
でも、これ、なんかオシイじゃん。
(続く)