GroovyでHTMLを整形する…つもりだったけど
仕事でお客様に提示するHTMLを作成中。
- 入力不可にしてほしい
- 色は緑に
- もうすこし幅を・・・
などの要件を盛り込んでいるうちに、HTMLがめちゃくちゃ汚くなってきた。(インデントはない、タグの属性は順序がばらばら。変更が積み重なるうちに、xmlに準拠してなくなってきている気も・・・)
ちょっとだけ HTML整形スクリプト を作ってみた。(正確にはxmlです。XmlSlurper
を使っているので。)
def xmltext = '''
<records>
<car name='HSV Maloo' make='Holden' year='2006'>
<country>Australia</country>
<record type='speed'>Production Pickup Truck with speed of 271kph</record>
</car>
<car name='P50' make='Peel' year='1962'>
<country>Isle of Man</country>
<record type='size'>Smallest Street-Legal Car at 99cm wide and 59 kg in weight</record>
</car>
<car name='Royale' make='Bugatti' year='1931'>
<country>France</country>
<record type='price'>Most Valuable Car at $15 million</record>
</car>
</records>'''
def spaces = 4
output = { node, indent ->
def name = node.name()
def start = " " * indent + "<" +
([name] + node.attributes().collect { "${it.key}=" $ { it.value } "" }.sort()).join(" ") + ">"
def children = node.children()
if (!children.isEmpty()) {
def center = children.collect {
output(it, indent + spaces)
}.join("
")
def end = " " * indent + "</$name>"
return [start, center, end].join("
")
} else {
def end = "</$name>"
return [start, node.text(), end].join("")
}
}
def records = new XmlSlurper().parseText(xmltext)
println output(records, 0)
- 自動的にインデントづけ
- タグの属性は、辞書順でソート(これは直した方がよかったかも)
- 当然、xmlに準拠しない構造の場合にはエラー
面倒くさいけど、 xmltextの変数部分にbodyをコピペして 動かしていました。(ファイル全体を取り込むと、xmlのチェックに引っかかって動かない…)これで正常に動くかと思っていたのですが、正常に整形されるbodyとエラーで整形できないbodyが発生しています。うーーん・・・
ディスカッション
コメント一覧
まだ、コメントがありません