プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

簡単なHTMLの表をXMLに変換する方法

 どーも。

 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>

手順

 手順は以下です。

  1. 表をExcel等に貼り付ける
  2. 1行目をタグの名前に変更する
  3. CSVとして保存する
  4. CSV to XML ConverterでXMLに変換

スプレッドシートに貼り付けてCSV化

 ブラウザ上で表をコピーすると、そのままExcelやLibreOffice CalcGoogle SpreadSheetに貼り付けることが出来ます。というか、Excelなんて持ってないので、わざわざLibreOffice入れたけど、Google SpreadSheetでも出来たことに驚いた。オフィス製品いらないねぇ…

f:id:nodamushi:20190126141518p:plain
表を選択してコピー
f:id:nodamushi:20190126131207p:plain:w240
LibreOffice Calcでペースト
f:id:nodamushi:20190126131235p:plain:w240
Google SpreadSheetでペースト

 1行目を必要なタグ名に変更する。

f:id:nodamushi:20190126131816p:plain:w320
name,arguments,descriptionに変更した

 全体を見て、ペースト結果が結合されているなどおかしい場所がなければ、CSVとして保存する。 f:id:nodamushi:20190126132114p:plain:w320

 LibreOfficeで保存する場合は、途中でフォーマットについて聞かれるので、UTF8で保存しましょう。Excelは知らない。 f:id:nodamushi:20190126134704p:plain:w320  

CSV to XML ConverterでXMLに変換

 出来たCSVをCSV to XML ConverterでXMLに変換します。

 先ほど作ったCSVファイルを入力しましょう。このサイトでXMLに変換しても、情報などはサーバー上には転送されないので安心して下さい。

f:id:nodamushi:20190126135438p:plain

 

  行を「function」で、全体を「functions」で囲いたいので、Step4を開いて、テンプレートをカスタムします。

 ちょっとしたネスト構造なら、このテンプレートを操作することで作ることも可能。なお、テンプレート中の{h1},{f2}などの1,2は列番号です。hはヘッダだと思うケド、fって何の略だろ?

f:id:nodamushi:20190126140004p:plain

 

 「Convert CSV to XML via Template」を押すとテンプレートを使って変換してくれます。

f:id:nodamushi:20190126140123p:plain

 

 後はエディタにペーストするなり、ダウンロードするなり、好きにするがよろし。

 

 

要素数が少ないなら

 ちなみに、要素数が3個、行数も10ぐらいしかなかったので、実際は私はこういう方法で解決しました。

 スプレッドシートに貼り付け、1行目を削除し、各行の間に空白の列を入れる。

f:id:nodamushi:20190126132515p:plain

 タグで挟む f:id:nodamushi:20190126132716p:plain

 左下の端をドラッグして縦に複製 f:id:nodamushi:20190126132832p:plain

 全体をコピってメモ帳に貼り付け。functionsで囲う。 f:id:nodamushi:20190126133015p:plain

 

 ただ、出来上がるXMLとやり方があまりに雑なので、もうちょっと上手なやり方ないかなと、模索してみたのがこの記事の内容です。