S-JIS[2009-02-01/2009-02-21] 変更履歴
htlexタスクを使ってタグを操作(検索・置換)するサンプルです。
「script」というタグ名のタグを検索する例です。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="HtHtmlLexer sample" default="find" basedir="."> <typedef resource="htlex.typedef.properties" classpath="htlexer.jar" /> <property name="html" location="C:\temp\lexer\from" /> <property name="todir" location="C:\temp\lexer\to" /> <target name="find"> <htlex> <fileset dir="${html}"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" logMatch="info"> <ctag name="script" /> </htconv> </htlex> </target> </project>
Buildfile: HtLexerSample\bin\build.xml
find:
〜
match: C:\temp\lexer\from\tool\ttermmac.html
260 <SCRIPT TYPE="text/javascript">
261 </SCRIPT>
262 <script type="text/javascript" src="http://www.assoc-amazon.jp/s/ads.js">
262 </script>
〜
BUILD SUCCESSFUL
Total time: 15 seconds
logMatchを指定しているので、対象のタグを見つけた際に、そのファイル名と行番号およびタグの内容を出力します。
ctagのnameの比較はデフォルトで大文字小文字を無視するので、SCRIPTやscirpt、Scriptでもマッチします。
bタグをstrong、iタグをemに置換する例です。
HtHtmlLexerでは開始タグと終了タグを区別しない為、「<b>」も「</b>」も、また「<b
class="hoge">」もstrongに置換します。
<target name="replace"> <htlex todir="${todir}"> <fileset dir="${html}"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" logConvert="info" logWriteFile="warn"> <ctag name="b"> <newtag newName="strong" /> </ctag> <ctag name="i"> <newtag newName="em" /> </ctag> </htconv> </htlex> </target>
この例ではlogConvertにinfoレベル、logWriteFileにwarningレベルを指定しています。
これで、置換した際にその内容をinfoレベルで、出力したファイル名をwarningレベルでログ出力します。
(EclipseのAntで実行すると、ログレベルによって色が変わるので分かり易いです(笑))
(HTML4ではbタグやiタグは非推奨になったらしいので、strongやemに変更したかったんだよねー。
ところが、HTML5ではbタグやiタグは非推奨ではなくなり、strongタグの意味が変わるらしい…困ったもんだ(苦笑))
HtHtmlParserを使って、ペアとなる開始タグと終了タグを両方とも変更できるようになりました。[2009-02-21]
<div align="center">〜</div>を<center>〜</center>に変更する例です。(今どきこんな置換は不要だろうけど…(苦笑))
<htconv encoding="MS932" logConvert="info"> <ctag name="div" pair="pair"> <cattr name="align" value="center" /> <newtag newName="center" newNamePair="yes"> <delattr name="align" /> </newtag> </ctag> </htconv>
ctagとcattrによって<div
align="center">を指定し、newtagによってタグ名をcenterに変更し、delattrによってalign="center"を削除します。
また、ctagのpair属性を「pair」に指定することで、開始タグと終了タグが揃っている場合だけを変更対象とし、
newtagのnewNamePair属性をtrueにすることで、開始タグと終了タグの両方のタグ名をcenterに変更します。
全てのタグ名を小文字に置換する例です。[2009-02-03]
<target name="case"> <htlex todir="${todir}"> <fileset dir="${html}"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" logWriteFile="warn"> <ctag> <newtag newNameCase="lower" /> </ctag> </htconv> </htlex> </target>
ctagに何の属性(条件)も指定しないと、全タグが変換対象になります。
開始タグ・終了タグのどちらかが省略されているp要素を探す例です。[2009-02-21]
<target name="parse nopair find"> <htlex> <fileset dir="${html}"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" logMatch="info"> <ctag name="p" pair="nopair" /> </htconv> </htlex> </target>
開始タグのみ存在して終了タグが無いp要素を探す場合は、tagoやtagcも指定すればよいです。
(開始タグのタグ開き(tago)は「<」、タグ閉じ(tagc)は「>」なので、それを指定する。
終了タグはタグ開き(tago)が「</」あるいはタグ閉じ(tagc)が「/>」なので、マッチしない)
<ctag name="p" pair="nopair" tago="<" tagc=">" />
ペアとなるli・dt・dd要素を補完する例です。[2009-02-21]
(例えば、開始タグ<li>のみの要素に終了タグ</li>を付け加える)
<target name="parse replenish li/dt/dd"> <htlex todir="${todir}"> <fileset dir="${html}"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" logConvert="info"> <ctag name="li|dt|dd" nameMatch="matches"> <newtag replenish="true" /> </ctag> </htconv> </htlex> </target>