どーも。
Markdownとかorg-modeとかで表で書いてた情報と、同じ情報をXMLで書かなきゃいけなくなったという場面に遭遇しました。
これらはGitBucketで表示していたので、要するにHTMLの表→XMLへの変換をしたい。
かといって、今回の為だけにプログラム書くのも面倒くさいし、既存の物で何とかしてみよう。
前提条件
必ず、ExcelかLibreOffice CalcもしくはGoogle SpreadSheetが使える環境であること。インターネットに接続出来ること。
そして、生成するXMLは以下の様にシンプルな構造であること。
<全体> <行> <列1>中身 </列1> <列2>中身 </列2> </行> <行> <列1>中身 </列1> <列2>中身 </列2> </行> </全体>
データはネスト要素を持たない。
<行> <列1> <struct> <!-- 列が更に構造を持つのはちょっと辛い --> </struct> </列1> </行>
不可能ではないけど、表の段階で何処まできちんと分離してあるかによるかな。
例
関数名 | 引数 | 説明 |
---|---|---|
hoge | uint32_t moge | ほげる |
piyo | const string& puyo | ぴよる |
taro | たろる |
↓
<functions> <function> <name>hoge </name> <arguments>uint32_t moge </arguments> <descriptions>ほげる </descriptions> </function> <function> <!-- ブログ上、以下略 --> </function> </functions>
手順
手順は以下です。
- 表をExcel等に貼り付ける
- 1行目をタグの名前に変更する
- CSVとして保存する
- CSV to XML ConverterでXMLに変換
スプレッドシートに貼り付けてCSV化
ブラウザ上で表をコピーすると、そのままExcelやLibreOffice Calc、Google SpreadSheetに貼り付けることが出来ます。というか、Excelなんて持ってないので、わざわざLibreOffice入れたけど、Google SpreadSheetでも出来たことに驚いた。オフィス製品いらないねぇ…
1行目を必要なタグ名に変更する。
全体を見て、ペースト結果が結合されているなどおかしい場所がなければ、CSVとして保存する。
LibreOfficeで保存する場合は、途中でフォーマットについて聞かれるので、UTF8で保存しましょう。Excelは知らない。
CSV to XML ConverterでXMLに変換
出来たCSVをCSV to XML ConverterでXMLに変換します。
先ほど作ったCSVファイルを入力しましょう。このサイトでXMLに変換しても、情報などはサーバー上には転送されないので安心して下さい。
行を「function」で、全体を「functions」で囲いたいので、Step4を開いて、テンプレートをカスタムします。
ちょっとしたネスト構造なら、このテンプレートを操作することで作ることも可能。なお、テンプレート中の{h1},{f2}などの1,2は列番号です。hはヘッダだと思うケド、fって何の略だろ?
「Convert CSV to XML via Template」を押すとテンプレートを使って変換してくれます。
後はエディタにペーストするなり、ダウンロードするなり、好きにするがよろし。
要素数が少ないなら
ちなみに、要素数が3個、行数も10ぐらいしかなかったので、実際は私はこういう方法で解決しました。
スプレッドシートに貼り付け、1行目を削除し、各行の間に空白の列を入れる。
タグで挟む
左下の端をドラッグして縦に複製
全体をコピってメモ帳に貼り付け。functionsで囲う。
ただ、出来上がるXMLとやり方があまりに雑なので、もうちょっと上手なやり方ないかなと、模索してみたのがこの記事の内容です。