tidy 便利です.XMLも整形できます.送ってもらったXMLがインデントなしで、CDATAがあふれかえっているので、チョッと困ったので整形することにした.
XML整形で一番よく使うオプション
tidy --indent-cdata true -xml -utf8 -i ./sample.xml
上に,出力ファイル名を加えたもの
tidy --indent-cdata true -xml -utf8 -i -o sample_out.xml ./sample.xml
XMLを整形してインデントして,CDATAを整形してインデントしてくれる
たとえば
xml version="1.0"<a><b/><content><![CDATA[これはテスト]]></content></a>
は
xml version="1.0"
<a>
<b />
<content>
<![CDATA[これはテスト]]>
</content>
</a>
になり格段に見やすくなる
出力ファイルは、入力ファイルより前に置くのがミソ
出力が入力より先なのでビックリする
--XXXX true オプションは全ての -X より前に置くのがミソ
--config-name value は -i などよりも前に置くとウマく解釈してくれる
ちなみに整形済みを元に戻すなら
tidy -xml -utf8 ./out.xml 2>/dev/null| tr -d '\n' > reverse.xml
かなぁ
tr 活用で,改行削除して スペースなしの一行XMLを作る.
折り返し無し
tidy のXML整形は、68を超えた行分はそこに収まるように 属性を折り返してくれる。attribute まで折り返さなくても良いんですが.そもそも折り返しはあんまり要らなかったりする.極端に多量の属性使うならノード使う方が良いよね?XMLって
tidy --wrap 0 --indent-cdata true -xml -utf8 -i
wrap 0で折り返しを無効にする.出力は属性の折り返しなしで,1ノードが1行に収まって、インデントついて便利
ビルド方法
cygwin には tidy が無かったのでmake しました
コマンド
wget -O tidy.tar.gz http://tidy.cvs.sourceforge.net/viewvc/tidy/?view=tar
tar zxvf tidy.tar.gz
/bin/sh build/gnuauto/setup.sh
./configure
make
make install
setup.sh で configure を作るあたりがチョッとつまりどころ
やりたいこと。はXML整形
tidy でXMLを整形して読みやすくする
tidy のヘルプを読んでみる
./tidy -h
>tidy [option...] [file...] [option...] [file...]
>Utility to clean up and pretty print HTML/XHTML/XML
>See http://tidy.sourceforge.net/
>
>Options for HTML Tidy for Cygwin released on 25 March 2009:
>
>File manipulation
>-----------------
> -output <file>, -o write output to the specified <file>
> <file>
> -config <file> set configuration options from the specified <file>
> -file <file>, -f write errors and warnings to the specified <file>
> <file>
> -modify, -m modify the original input files
>
>Processing directives
>---------------------
> -indent, -i indent element content
> -wrap <column>, -w wrap text at the specified <column>. 0 is assumed if
> <column> <column> is missing. When this option is omitted, the
> default of the configuration option "wrap" applies.
> -upper, -u force tags to upper case
> -clean, -c replace FONT, NOBR and CENTER tags by CSS
> -bare, -b strip out smart quotes and em dashes, etc.
> -numeric, -n output numeric rather than named entities
> -errors, -e show only errors and warnings
> -quiet, -q suppress nonessential output
> -omit omit optional end tags
> -xml specify the input is well formed XML
> -asxml, -asxhtml convert HTML to well formed XHTML
> -ashtml force XHTML to well formed HTML
> -access <level> do additional accessibility checks (<level> = 0, 1, 2, 3).
> 0 is assumed if <level> is missing.
>
>Character encodings
>-------------------
> -raw output values above 127 without conversion to entities
> -ascii use ISO-8859-1 for input, US-ASCII for output
> -latin0 use ISO-8859-15 for input, US-ASCII for output
> -latin1 use ISO-8859-1 for both input and output
> -iso2022 use ISO-2022 for both input and output
> -utf8 use UTF-8 for both input and output
> -mac use MacRoman for input, US-ASCII for output
> -win1252 use Windows-1252 for input, US-ASCII for output
> -ibm858 use IBM-858 (CP850+Euro) for input, US-ASCII for output
> -utf16le use UTF-16LE for both input and output
> -utf16be use UTF-16BE for both input and output
> -utf16 use UTF-16 for both input and output
> -big5 use Big5 for both input and output
> -shiftjis use Shift_JIS for both input and output
> -language <lang> set the two-letter language code <lang> (for future use)
>
>Miscellaneous
>-------------
> -version, -v show the version of Tidy
> -help, -h, -? list the command line options
> -xml-help list the command line options in XML format
> -help-config list all configuration options
> -xml-config list all configuration options in XML format
> -show-config list the current configuration settings
>
>Use --optionX valueX for any configuration option "optionX" with argument
>"valueX". For a list of the configuration options, use "-help-config" or refer
>to the man page.
>
>Input/Output default to stdin/stdout respectively.
>Single letter options apart from -f may be combined
>as in: tidy -f errs.txt -imu foo.html
>For further info on HTML see http://www.w3.org/MarkUp
>
めんどくさそう・・・・
tidy でXMLのインデントを修正してみる
help ファイルを元にコマンドを考えてみる.
tidy -i -xml -utf8 sample.xml
CDATAがインデントされなくて崩壊する
出力ファイルを指定する
tidy -o out.xml -i -i -utf8 sample.xml
- o オプションはインプットファイルより前に指定しないと動かなかった.
更に調べると,
より細かいオプションは
tidy --input-xml true
のように --option-name true
または、 --option-name value
で指定する.とわかる
--XXXは何か
より詳細なオプションと言う位置づけっぽい
詳細オプションを全部見てみる
./tidy -show-config
>
>Configuration File Settings:
>
>Name Type Current Value
>=========================== ========= ========================================
>accessibility-check enum 0 (Tidy Classic)
>add-xml-decl Boolean no
>add-xml-space Boolean no
>alt-text String
>anchor-as-name Boolean yes
>ascii-chars Boolean no
>assume-xml-procins Boolean no
>bare Boolean no
>break-before-br Boolean no
>char-encoding Encoding ascii
>clean Boolean no
>css-prefix String
>decorate-inferred-ul Boolean no
>doctype DocType auto
>doctype-mode Integer *1
>drop-empty-paras Boolean yes
>drop-font-tags Boolean no
>drop-proprietary-attributes Boolean no
>enclose-block-text Boolean no
>enclose-text Boolean no
>error-file String
>escape-cdata Boolean no
>fix-backslash Boolean yes
>fix-bad-comments Boolean yes
>fix-uri Boolean yes
>force-output Boolean no
>gnu-emacs Boolean no
>gnu-emacs-file String
>hide-comments Boolean no
>hide-endtags Boolean no
>indent AutoBool no
>indent-attributes Boolean no
>indent-cdata Boolean no
>indent-spaces Integer 2
>input-encoding Encoding latin1
>input-xml Boolean yes
>join-classes Boolean no
>join-styles Boolean yes
>keep-time Boolean no
>language String
>literal-attributes Boolean no
>logical-emphasis Boolean no
>lower-literals Boolean yes
>markup Boolean yes
>merge-divs AutoBool auto
>merge-spans AutoBool auto
>ncr Boolean yes
>new-blocklevel-tags Tag names
>new-empty-tags Tag names
>new-inline-tags Tag names
>new-pre-tags Tag names
>newline enum LF
>numeric-entities Boolean no
>output-bom AutoBool auto
>output-encoding Encoding ascii
>output-file String
>output-html Boolean no
>output-xhtml Boolean no
>output-xml Boolean no
>preserve-entities Boolean no
>punctuation-wrap Boolean no
>quiet Boolean no
>quote-ampersand Boolean yes
>quote-marks Boolean no
>quote-nbsp Boolean yes
>repeated-attributes enum keep-last
>replace-color Boolean no
>show-body-only AutoBool no
>show-errors Integer 6
>show-warnings Boolean yes
>slide-style String
>sort-attributes enum none
>split Boolean no
>tab-size Integer 8
>tidy-mark Boolean yes
>uppercase-attributes Boolean no
>uppercase-tags Boolean no
>vertical-space Boolean no
>word-2000 Boolean no
>wrap Integer 68
>wrap-asp Boolean yes
>wrap-attributes Boolean no
>wrap-jste Boolean yes
>wrap-php Boolean yes
>wrap-script-literals Boolean no
>wrap-sections Boolean yes
>write-back Boolean no
>
>
>Values marked with an *asterisk are calculated
>internally by HTML Tidy
>
オプションが反映される様子
オプションをつけたら値が反映されることを確認.
tidy --indent-cdata true -show-config > ./tidy.config
以上からXMLの整形は細かく指定できる
tidy --tab-size 2 --input-encoding utf8 --input-xml true --indent-cdata true -show-config > ./tidy.config
などとすればオプションが変えられる
オプションの名前を間違えると,オプション値が入力ファイル名に解釈されるので注意が必要