それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

XMLを整形(tidy)して読みやすく、貼りつけやすくする。

XMLをもらったけど、階層ツリーがむちゃくちゃでわからない

tidy -utf8  -i --input-xml true  --indent-cdata true  ./sample.xml 


しかも昔にエントリ書いてるし。www


tidy のインストール。

mac
はじめから
linux
debian gnu/linuxは aptで
windows
コンパイル済みバイナリをどこかでダウンロードしてくる
cygwin
setup.exeや apt-cyg で

XMLの整形

tidyでxmlを整形するには・

 -xml オプションを付ける。

tidy -xml ./sample.xml

または tidy-configを使う。( --input-xml true)

出力

takuya@air:~/Desktop$ tidy -q -xml sample.xml  | head
line 164 column 40 - Warning: replacing invalid character code 151

<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
<Header copyright="BMRC">
<Application name="mclassify" version="1.0" />
<Timestamp>15 Jun 2010 17:54:26</Timestamp>
</Header>
<DataDictionary numberOfFields="7">
<DataField name="&#230;&#176;&#8212;&#230;&#184;&#169;"
optype="continuous" dataType="double"></DataField>
<DataField name="&#230;&#185;&#191;&#229;&#186;&#166;"

あちゃっ文字化けだ。*1

文字コードを指定する。


line 164 column 40 - Warning: replacing invalid character code 151

のように文字コードに問題があるときはちゃんと指定する。

 -utf8オプションを付ける。

結果

takuya@air:~/Desktop$ tidy -q -utf8 -xml sample.xml  | head
<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
<Header copyright="BMRC">
<Application name="mclassify" version="1.0" />
<Timestamp>15 Jun 2010 17:54:26</Timestamp>
</Header>
<DataDictionary numberOfFields="7">
<DataField name="気温" optype="continuous" dataType="double">
</DataField>
<DataField name="湿度" optype="continuous" dataType="double">

インデントを指定する。

takuya@air:~/Desktop$ tidy -q -i -utf8 -xml sample.xml  | head
<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
  <Header copyright="BMRC">
    <Application name="mclassify" version="1.0" />
    <Timestamp>15 Jun 2010 17:54:26</Timestamp>
  </Header>
  <DataDictionary numberOfFields="7">
    <DataField name="気温" optype="continuous" dataType="double">
    </DataField>
    <DataField name="湿度" optype="continuous" dataType="double”>

余計なメッセージを消す。

標準エラーに出力される、メッセージがうざったいので消す。

 -q : quiet 黙れ。 

出力ファイルを指定する。

単純にリダイレクをする。

tidy -q -i -utf8 -xml sample.xml  > neat.xml

または出力ファイルを指定する。

tidy -q -i -utf8 -xml  -o neat.xml sample.xml 

このときの注意点は、 -o text.xmlを sample.xml(入力ファイル)より先に指定する。

この指定がうざったい・・・

インデントの細かいオプションをつける。

タグの階層でインデントをする。

tidy -utf8  -i --input-xml true  --indent-cdata true  ./sample.xml 

さらに属性でインデントもつけたい。

tidy -q -utf8  -i --input-xml true  --indent-cdata true --indent-attributes true ./sample.xml  

これで、インデントが属性にも適用されて読みやすくなる。

出力結果。

takuya@air:~/Desktop$ tidy -q -utf8  -i --input-xml true  --indent-cdata true --indent-attributes true ./sample.xml  | head -n 20
<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
  <Header copyright="BMRC">
    <Application name="mclassify"
                 version="1.0" />
    <Timestamp>15 Jun 2010 17:54:26</Timestamp>
  </Header>
  <DataDictionary numberOfFields="7">
    <DataField name="気温"
               optype="continuous"
               dataType="double"></DataField>
    <DataField name="湿度"
               optype="continuous"
               dataType="double"></DataField>
    <DataField name="天候"
               optype="categorical"
               dataType="string">
      <Value value="晴れ" />
      <Value value="曇り" />
      <Value value="雨" />

--indent-xxxなどのオプションを全部みたい。

tidy -show-config 

で設定項目が分かる。




ま、こんなコトしなくても、見るだけなら、Opera/Safari/Firefoxなどブラウザで開くのが手っ取り早いんだけどね。

*1:文字化けというより、XMLのUTF8の文字符号になってるんだけどさ。